C++關于面(mian)向對象構造方法總結
時間:2018-09-29 來(lai)源:未知
這里總結下C++中關于子類(lei)繼承(cheng)父類(lei)后構(gou)造方法的調用問(wen)題
1.首(shou)先看下這(zhe)種情況
//父類
class parent
{
public:
parent(int b){cout<<"parent has parame b = "<<b<<endl;}
};
//子類
class child : public parent
{
public:
child(int a){cout<<"child has parame a = "<<a<<endl;}
};
//main函數(shu)
#include "child.h"
int main()
{
child a(5);
}
父類(lei)和子類(lei)各有一個帶整(zheng)形(xing)形(xing)參的(de)構造方法,此時編譯程序,是有錯誤的(de),如下
F:\qt_program\cpp_test\child.h:-1: In constructor 'child::child(int)':
F:\qt_program\cpp_test\child.h:9: error: no matching function for call to 'parent::parent()'
child(int a){cout<<"child has parame a = "<<a<<endl;}
什(shen)么(me)意思呢?就是(shi)說在構造(zao)(zao)child類時候,調(diao)用了父(fu)類構造(zao)(zao)方法(fa)parent,但是(shi)這個構造(zao)(zao)方法(fa)必須(xu)不(bu)帶參數(shu),
而父類中是沒有這么(me)一個(ge)方法的,所以(yi)會產生這個(ge)錯(cuo)誤(wu)。
2.我們把父類改為如下形(xing)式,加入一個不(bu)帶形(xing)參的(de)構造方法
class parent
{
public:
parent(){cout<<"parent no parame"<<endl;}
parent(int b){cout<<"parent has parame b = "<<b<<endl;}
};
那么此時就編譯通(tong)過了,輸出信息為:
parent no parame
parent has parame b = 5
也就說在子類實例化(hua)過程中(zhong),首先默認調用了(le)父類無參構造函(han)數(shu),然后再調用子類構造函(han)數(shu)
3.那么(me)如果(guo)我們子類(lei)想調用父類(lei)的帶參構造函數怎么(me)辦(ban)呢?就需要對子類(lei)作如下(xia)修改:
class child : public parent
{
public:
child(int a):parent(6)
{cout<<"child has parame a = "<<a<<endl;}
};
這樣子(zi)類(lei)在(zai)(zai)構(gou)造(zao)時(shi)候,會默認(ren)先調(diao)用(yong)父類(lei)帶參構(gou)造(zao),然后在(zai)(zai)調(diao)用(yong)子(zi)類(lei)相應構(gou)造(zao)方法(fa)

