簡體   English   中英

將動態數組對象傳遞給朋友函數不會累積計數器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM