亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下程序,實在是看不明白了,請高人指點吶!

如下程序,實在是看不明白了,請高人指點吶!

C++
MYYA 2023-04-02 21:21:10
程序要求輸出學生、老師、研究生的檔案//檔案管理.cpp#include<iostream.h>#include<string.h>class Person{char *name;char sex;int age;public:Person(char *na,char sx,int ag){age=ag;sex=sx;name=new char[strlen(na)+1];strcpy(name,na);}void print()const{cout<<" "<<name<<":";cout<<age<<":";cout<<sex<<endl;}~Person(){delete[]name;}};class Student:public Person{int number;char department[50];public:Student(char*na,char sx,int ag,int num,char*dep){ number=num;strcpy(department,dep);}void print()const{Person::print();cout<<" number:"<<number<<endl;cout<<" department:"<<department<<endl;}};class Teacher:public Person{char post[20],course[30];public:Teacher(char*na,char sx,int ag,char*po,char*co):person(na,sx,ag){strcpy(post,po);strcpy(course,co);}void print()const{Person::print();cout<<" post:"<<post<<endl; cout<<" course:"<<course<<endl;}};class Graduatestudent:public Student{char advisor[30];public:Graduatestudent(char*na,char sx,int ag,int num,char*dep,char*ad):student(na,sx,ag,num,dep){strcpy(advisor,ad);}void print()const{Student::print();cout<<" advisor:"<<advisor<<endl;}};void main(){Person per1("zhang",'F',23),per2("chen",'M',37);Student stu1("li",'M',22,1001,"comp"),stu2("cui",'F',21,1002,"math");Teacher teach1("meng",'M',46,"professor","english");Graduatestudent grastu("zhou",'M',25,1011,"comp","liu");cout<<"===per1.print()==>name,age,sex"<<endl;per1.print();cout<<"===per2.print()==>name,age,sex"<<endl;per2.print();cout<<"===stu1.print()==>name,age,sex,number,department,advisor"<<endl;grastu.Graduatestudent::print();}這個程序運行時總是說Student(char*na,char sx,int ag,int num,char*dep)這一行error C2512: 'Person' : no appropriate default constructor available。
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

問題分析:
因為派生類在調用自己的構造函數之前需要先調用父類的構造函數,如果你的派生類構造函數初始化列表中沒有顯式的調用父類的構造函數,他就會自動的調用父類的默認構造函數(也就是不帶參數的構造函數),例如類Student在調用自己的構造函數“Student(char*na,char sx,int ag,int num,char*dep)”時需要調用父類的默認構造函數,而其父類Person的默認構造函數你沒有定義,所以會出現上述錯誤。

解決方法:
給Person類定義默認構造函數,即使什么也不做也要定義一個空函數


查看完整回答
反對 回復 2023-04-05
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

錯誤主要是因為你的繼承類Student中沒有為父類定義構造函數,你應該會的,就象Graduatestudent繼承類的構造函數一樣就行了
還有就是大小寫問題了你的兩次繼承類中定義的構造函數都出現了這個問題,要知道大小寫可是不同滴呀.
1.
Teacher(char*na,char sx,int ag,char*po,char*co):Person(na,sx,ag) //Person要大寫才是你定義的類嘛

strcpy(post,po); 
strcpy(course,co); 

2.
Graduatestudent(char*na,char sx,int ag,int num,char*dep,char*ad):student(na,sx,ag,num,dep)//Studnet要大寫嘛 

strcpy(advisor,ad); 
}


查看完整回答
反對 回復 2023-04-05
  • 2 回答
  • 0 關注
  • 185 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號