3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
構(gòu)造函數(shù)是一種特殊的成員函數(shù)。當(dāng)說明對(duì)象時(shí),被自動(dòng)調(diào)用,而不能象普通成員函數(shù)那樣被顯示調(diào)用。
如果想完成你的想法,把你的帶參數(shù)的構(gòu)造函數(shù)改為普通成員函數(shù)就可以了。

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
構(gòu)造函數(shù)C++規(guī)定不能顯式調(diào)用:a[i].stud(no2,name2,deg2);
原因是構(gòu)造函數(shù)只是在創(chuàng)建對(duì)象時(shí)才調(diào)用,你的不是構(gòu)建,此時(shí)對(duì)象已經(jīng)存在了
如果實(shí)在是想這樣做,可以利用無名對(duì)象賦值這樣做
a[i]=stud(no2,name2,deg2);
已存在對(duì)象只能用賦值或者另外設(shè)計(jì)一個(gè)類似的成員函數(shù)來調(diào)用

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
這樣試試
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<<"學(xué)號(hào):"<<no<<endl
<<"姓名:"<<name<<endl
<<"成績(jī):"<<deg<<endl;
}
float avg()
{
return float (sum)/deg;
}
} ;
int main()
{
stud a[3]; //聲明一個(gè)對(duì)象數(shù)組,進(jìn)行對(duì)象數(shù)據(jù)初始化,我加了一個(gè)構(gòu)造函數(shù)
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);//這里不要再調(diào)用構(gòu)造函數(shù)
}
for(int j=0;j<3;j++)
{
a[j].disp();
}
cout<<"sum="<<sum<<' '<<"num="<<num<<endl;
return 0;
}
- 3 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報(bào)