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 關注
- 166 瀏覽
添加回答
舉報