3 回答
TA贡献1808条经验 获得超4个赞
构造函数是一种特殊的成员函数。当说明对象时,被自动调用,而不能象普通成员函数那样被显示调用。
如果想完成你的想法,把你的带参数的构造函数改为普通成员函数就可以了。
TA贡献1803条经验 获得超3个赞
构造函数C++规定不能显式调用:a[i].stud(no2,name2,deg2);
原因是构造函数只是在创建对象时才调用,你的不是构建,此时对象已经存在了
如果实在是想这样做,可以利用无名对象赋值这样做
a[i]=stud(no2,name2,deg2);
已存在对象只能用赋值或者另外设计一个类似的成员函数来调用
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;
}
- 3 回答
- 0 关注
- 114 浏览
添加回答
举报