#include <iostream.h>class Building{private:?int floor;?int room;?float area;public:?Building(int f,int r,float a)?{??floor=f;??room=r;??area=a;?}?virtual void show()?{??cout<<"樓房的層數(shù):"<<floor<<"房間數(shù):"<<room<<"總平方數(shù):"<<area<<endl;?}};class House:public Building{private:?int bedroom;?int bathroom;public:?House(int be,int ba)?{??bedroom=be;??bathroom=ba;?}?void show()?{??cout<<"臥室的數(shù)量:"<<bedroom<<"浴室的數(shù)量:"<<bathroom<<endl;?}};class Office:public Building{private:?int fire;?int telephone;public:?Office(int fi,int te)?{??fire=fi;??telephone=te;?}?void show()?{??cout<<"滅火器的數(shù)量:"<<fire<<"電話的數(shù)量:"<<telephone<<endl;?}};void main(){?Building B(3,5,100),*p;?House H(3,2);?Office O(5,6);?p=&B;?p->show();?p=&H;?p->show();?p=&O;?p->show();}error C2512: 'Building' : no appropriate default constructor available為什么會出現(xiàn)這個
1 回答

MadMarical
TA貢獻79條經(jīng)驗 獲得超122個贊
你好。在c++中,繼承不會繼承父類的構(gòu)造方法。但是在你調(diào)用子類方法時,會調(diào)用父類的構(gòu)造函數(shù)。那么你這個問題就是因為繼承之后沒有顯示的初始化你父類的構(gòu)造方法導致了錯誤。比如你的house h(3,2)此時編譯器先調(diào)用父類的構(gòu)造方法,發(fā)現(xiàn)f,r,a 都不知道是什么,這樣就產(chǎn)生了錯誤。正確的方法,請看例程1。
例程1
#include?<iostream> using?namespace?std; class?Building { private: ????int?floor; ????int?room; ????float?area; public: ????Building(int?f,int?r,float?a)?:?floor(f),room(r),area(a) ????{ ????} ????virtual?void?show() ????{ ????????cout<<"樓房的層數(shù):"<<floor<<"房間數(shù):"<<room<<"總平方數(shù):"<<area<<endl; ????} }; class?House:public?Building { private: ????int?bedroom; ????int?bathroom; public: ????House(int?be,int?ba)?:?Building(3,4,5) ????{ ????????bedroom=be; ????????bathroom=ba; ????} ????void?show() ????{ ????????cout<<"臥室的數(shù)量:"<<bedroom<<"浴室的數(shù)量:"<<bathroom<<endl; ????} }; class?Office:public?Building { private: ????int?fire; ????int?telephone; public: ????Office(int?fi,int?te)?:?Building(3,4,5) ????{ ????????fire=fi; ????????telephone=te; ????} ????void?show() ????{ ????????cout<<"滅火器的數(shù)量:"<<fire<<"電話的數(shù)量:"<<telephone<<endl; ????} }; int?main() { ????Building?B(3,5,100),*p; ????House?H(3,2); ????Office?O(5,6); ????p=&B; ????p->show(); ????p=&H; ????p->show(); ????p=&O; ????p->show(); ???? ????return?0; }
- 1 回答
- 0 關(guān)注
- 1215 瀏覽
添加回答
舉報
0/150
提交
取消