为什么这里不可以直接传给构造函数?

#include "iostream.h"
#include "string.h"
class stud //新建一个学生类
{
private:
int no;//学号
char name[10];//姓名
int deg;//成绩
public:
static int sum;//总分
static int num;//人数
stud(){}
stud (int no1,char *name1,int deg1)//构造函数
{
no=no1;
strcpy(name,name1);
deg=deg1;
sum+=deg;
num++;
}
void disp()
{
cout<<"学号:"<<no<<endl
<<"姓名:"<<name<<endl
<<"成绩:"<<deg<<endl;
}
float avg()
{
return float (sum)/deg;
}

};
int stud:: num=0;
int stud:: sum=0;
main()
{  
stud a[3];//定义a数组,准备用循环建立3个学生对象
int no2,deg2;
char name2[10];
for(int i=0;i<3;i++)
{
cin>>no2>>name2>>deg2;
a[i].stud(no2,name2,deg2);//调用构造函数,报类型错,这里是向把这三个变量传给构造函数
}
for(int j=0;j<3;j++)
{
a[j].disp();
}
cout<<"sum="<<stud::sum<<' '<<"num="<<stud::num<<endl;

}

侃侃尔雅
浏览 79回答 3
3回答

炎炎设计

构造函数是一种特殊的成员函数。当说明对象时,被自动调用,而不能象普通成员函数那样被显示调用。如果想完成你的想法,把你的带参数的构造函数改为普通成员函数就可以了。

繁星点点滴滴

构造函数C++规定不能显式调用:a[i].stud(no2,name2,deg2);原因是构造函数只是在创建对象时才调用,你的不是构建,此时对象已经存在了如果实在是想这样做,可以利用无名对象赋值这样做a[i]=stud(no2,name2,deg2);已存在对象只能用赋值或者另外设计一个类似的成员函数来调用

慕勒3428872

这样试试int sum; //不要放到class中int num; //不要放到class中class stud{private:int no;char name[10];int deg;public:stud (){no=0;deg=0;memset( name , 0 , sizeof(name) );}void student (int &no1,char *name1,int °1){no=no1;memcpy( name , name1 , sizeof(name) );deg=deg1;sum+=deg;num++;}void disp(){cout<<"学号:"<<no<<endl<<"姓名:"<<name<<endl<<"成绩:"<<deg<<endl;}float avg(){return float (sum)/deg;}} ;int main(){stud a[3]; //声明一个对象数组,进行对象数据初始化,我加了一个构造函数int no2,deg2;char name2[10];sum=0;num=0;for(int i=0;i<3;i++){cin>>no2>>name2>>deg2;a[i].student(no2,name2,deg2);//这里不要再调用构造函数}for(int j=0;j<3;j++){a[j].disp();}cout<<"sum="<<sum<<' '<<"num="<<num<<endl;return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP