设计一个学生类student,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num ,分别存放总分和人数,另有一个构造函数,一个普通成员函数disp()和一个静态成员函数avg(),用于计算平均分。在主函数中,定义若干个学生对象,并初始化,包括学号、姓名、成绩,要求输出这些学生的数据并计算平均分。(提示,在构造函数和析构函数中要考虑静态变量num的变化。)
#include <iostream>
#include<string>
using namespace std;
class student
{
private:
static double sum;
static int num;
int no;
string name;
double deg;
public:
student():no(0),name("nobody"),deg(0)
{num++;sum+=deg;}
void display();
static double avg();
~student()
{ num--;sum-=deg;}
};
double sum=0;
double student::avg()
{
return sum/num;
}
void student::display()
{
cout<<"输出学生信息:"<<endl
<<"学号:"<<no<<endl
<<"姓名:"<<name<<endl
<<"成绩:"<<deg<<endl;
}
int main()
{
student s1(1001,"zhangsan",95.5),s2(1002,"lisi",92.5),s3(1003,"jane",88);
s1.display();
s2.display();
s3.display();
cout<<"avg"<<student::avg()<<endl
<<s2.avg()<<endl;
return 0;
}
你的student类只有缺省构造函数,没有带三个参数的构造函数,所以报错
还有点小问题,给你改了下:
#include <iostream>#include<string>
using namespace std;
class student
{
private:
static double sum; //类中的静态成员变量仅仅是个声明,不是定义
static int num;
int no;
string name;
double deg;
public:
student() :no(0),name("nobody"),deg(0)
{
num++;sum+=deg;
}
student(int n,string s,double d) //要有带三个参数的构造函数
{
no=n;
name=s;
deg=d;
num++;
sum+=deg;
}
void display();
static double avg();
~student()
{
num--;sum-=deg;
}
};
double student::sum=0; //这里的初始化才是静态成员变量的定义
int student::num=0; //同上
double student::avg()
{
return sum/num;
}
void student::display()
{
cout<<"输出学生信息:"<<endl <<"学号:"<<no<<endl <<"姓名:"<<name<<endl <<"成绩:"<<deg<<endl;
}int main()
{
student s1(1001,"zhangsan",95.5),s2(1002,"lisi",92.5),s3(1003,"jane",88);
s1.display();
s2.display();
s3.display();
cout<<"avg"<<student::avg()<<endl <<s2.avg()<<endl;
return 0;
}
student类没有这样的本回答被网友采纳