Bootstrap

(static)静态成员函数通过引用调用非静态数据成员

静态成员函数不能调用非静态数据,需通过引用(引用无需在private里声明,只需在函数声明时参数传入括号里写(类名 & 变量名))

#include "iostream"
#include "string.h"
using namespace std;
class Student{
    private:
        int number;
        string name;
        float score;
        static float sum;
        static int count;
        static float average;
    public:
        Student(int num,string n,float s):number(num),name(n),score(s){}
        void Student_Show();
        static void Student_Count();
        static void Student_Average(Student & s);       //静态成员函数声明,同时定义一个类的引用
        static void Class_Show();
};
void Student::Student_Show(){
            cout<<"学号: "<<number<<"\t姓名:"<<name<<"\t分数:"<<score<<endl;
}
float Student::sum=0.0;
int Student::count=0;
float Student::average=0.0;

void Student::Student_Count(){
    count++;
}
void Student::Student_Average(Student & s){
    sum+=s.score;                                                        //注意这里是点类里私有的那个数据成员

    average=sum/count;
}
void Student::Class_Show(){
    cout<<"\n学生人数:"<<count<<"\t平均成绩:"<<average<<endl;
}
int main(){
    Student myclass[3]={Student(12,"张明",89),Student(21,"王磊",92),Student(3,"陈珍",95)};
    for(int i=0;i<3;i++){
        myclass[i].Student_Show();
        myclass[i].Student_Count();
        myclass[i].Student_Average(myclass[i]);           //注意这里是把整个对象传入
    }
    Student::Class_Show();
    return 0;
}

;