C++构造函数错误,请高手指点

2024-11-30 00:51:39
推荐回答(4个)
回答1:

这是在你的源程序上经过改正的程序,可以正常运行,但不得不指出的是这个程序的效果和你最初的本意有些不符,可以看出你的这个程序问题在于你不会使用结构体,因为你仍是用数组来完成的,结构体未起到真正的作用。你可以再多锻炼一下,程序如下:

#include "iostream.h"
#include
#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(int no1,char *name1,int deg1) //注意这里要加参数,
{
printf("no2=%d\n",no1);

cout<<"学号:"< <<"姓名:"< <<"成绩:"< printf("\n\n");
}
float avg()
{
return float (sum)/deg;
}

};
int stud:: num=0;
int stud:: sum=0;
main()
{
stud a[3];
int no2,deg2;
char name2[10];

printf("请分别输入学号,姓名和成绩!\n");
for(int i=0;i<3;i++)
{
cin>>no2;
cin>>name2;
cin>>deg2;
//注意这里的变化 无 for(j……)了
stud(no2,name2,deg2); //构造函数前不要结构体名
a[i].disp(no2,name2,deg2);
}
cout<<"sum="<return 0;
}

回答2:

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

回答3:

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

回答4:

这样试试
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<<"学号:"< <<"姓名:"< <<"成绩:"< }
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="<