静态成员函数不能调用非静态数据,需通过引用(引用无需在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;
}