[英]passing dynamic array object to friend function doesn't accumulate counter
我在“摘要”函數中傳遞了動態數組對象,但無法獲取它來累加a,b和c的計數器。
樣本輸出:
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;
}
您的問題是int main()
這兩行:
(Stud1+1)->mark_entry();
(Stud1+1)->average();
在每次循環迭代中,您都在訪問相同的元素:第二個元素(索引1
)。 要訪問第i
個元素,只需用方括號索引到數組中即可:
Stud1[i].mark_entry();
Stud1[i].average();
如果您確實想像以前一樣將索引添加到指針(盡管在這種情況下沒有理由這樣做),則將(Stud1+1)
替換為(Stud1+i)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.