为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
侃侃尔雅 2023-04-20 15:15:14
#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;}
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-04-23
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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

查看完整回答
反对 回复 2023-04-23
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这样试试
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;
}

查看完整回答
反对 回复 2023-04-23
  • 3 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信