2016-09-22 3 views
0

'summary'関数で動的配列オブジェクトを渡しましたが、カウンタを累積することができませんでした。& c。動的配列オブジェクトをfriend関数に渡すとカウンタが累積されない

サンプル出力:

グレードA:*

グレードB:

グレードC:

(最後のものだけが記録され、蓄積しない)、私はCodeblockを使用して、ポインタを使用すると機能しなくなります)。

#include <iostream> 
using namespace std; 

class Marks 
{ 
    protected : 
     float marks[3]; 
     char grade; 
    public: 
     void mark_entry() 
     { 
     for(int i=0; i<3; i++) 
     { 
      cout<<"Enter Marks : "; 
      cin>>marks[i]; 
     } 
    } 
    void average() 
    { 
     float avg = (marks[0]+marks[1]+marks[2])/3; 
     set_grade(avg); 
    } 
    void set_grade(float average) 
    { 
     if(average >= 80 && average <= 100) 
     { 
      grade='A'; 
     } 
     else if(average >= 50 && average < 80) 
     { 
      grade='B'; 
     } 
     else if(average >= 0 && average < 50) 
     { 
      grade='C'; 
     } 
    } 
}; 
class Result : public Marks 
{ 
public: 
    char getGrade() 
    { 
     return grade; 
    } 
    friend void summary(Result [], int); 
}; 
void summary(Result arr[], int size) 
{ 
    int a=0, b=0, c=0; 
    cout<<"===================================="<<endl; 
    cout<<"\tSummary Results"<<endl; 
    cout<<"===================================="<<endl; 
     for(int i=0; i<size; i++) 
     { 
      switch(arr[i].grade) //switch(arr[i].getGrade) 
     { 
       case 'A' : a++; 
       break; 
       case 'B' : b++; 
       break; 
       case 'C' : c++; 
       break; 
      } 
     } 
    cout<<"Grade A : "; 
     for(int i=0; i<a; i++) 
     { 
      cout<<"*"; 
     } 
    cout<<"\nGrade B : "; 
     for(int i=0; i<b; i++) 
     { 
      cout<<"*"; 
     } 
    cout<<"\nGrade C : "; 
     for(int i=0; i<c; i++) 
     { 
      cout<<"*"<<endl; 
     } 
} 
int main() 
{ 
    int num; 
    cout<<"Enter number of students : "; 
    cin>>num; 
    Result *Stud1 = new Result[num]; 
    for(int i=0; i<num; i++) 
    { 
     cin.ignore(); 
     (Stud1+1)->mark_entry(); 
     (Stud1+1)->average(); 

    } 
    summary(Stud1, num); 
    delete[]Stud1; 
} 
+2

あなたは 'Stud1 + i'ではなく、定数である' Stud1 + 1'を書いています。また、 '(Stud1 + i)'の代わりに 'Stud1 [i]'を使うこともできます。 – kfsone

答えて

0

問題がありますint main()に2行をESE:秒1(インデックス1):各ループの繰り返しで

(Stud1+1)->mark_entry(); 
(Stud1+1)->average(); 

を、あなたは同じ要素にアクセスしています。あなたが本当に(このシナリオでそれをする理由はないが)あなたがやっていたようにポインタにインデックスを追加したい場合は

Stud1[i].mark_entry(); 
Stud1[i].average(); 

:ブラケット付き配列にi番目の要素、ちょうどインデックスにアクセスするには(Stud1+1)(Stud1+i)に置き換えてください。

関連する問題