C 父類與子類間構造,析構,拷貝的呼叫關係

2021-09-26 08:23:09 字數 2486 閱讀 4535

子類的構造在執行它的建構函式前會根據繼承表的順序執行父類的建構函式

#include #include #include using namespace std;

class base

base(const char *str)

};class a : public base

a(const char *str)// : base(str)

};int main()

執行結果:

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類無參構造

子類有參構造h

#include #include #include using namespace std;

class base

base(const char *str)

};class a : public base

a(const char *str) : base(str)

};int main()

執行結果

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類有參構造h

子類有參構造h

子類在它的析構函式執行完後,會根據繼承表的順序逆序執行父類的析構函式

#include #include #include using namespace std;

class base

base(const char *str)

~base(void)

};class a : public base

a(const char *str) : base(str)

~a(void)

};int main()

執行結果

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類有參構造xixi

子類有參構造xixi

子類析構

父類析構

----------------

父類有參構造haha

子類有參構造haha

父類析構

拷貝構造

當使用子類物件來初始化新的子類物件時,會自動呼叫預設的拷貝建構函式,並且會呼叫父類預設的拷貝建構函式

#include #include #include using namespace std;

class base

base(const char *str)

base(base &that)

};class a : public base

a(const char *str) : base(str)

a(a &that) : base(that)

};int main()

執行結果(子類中不過載拷貝構造)

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類有參構造x

子類有參構造x

------

父類拷貝構造

------

執行結果(子類中過載拷貝構造但不顯式呼叫父類拷貝構造)

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類有參構造x

子類有參構造x

------

父類無參構造

子類拷貝構造

------

執行結果(子類中過載且顯式呼叫父類拷貝構造)

wcq@desktop-pl6dijt:~/code$ cd "/home/wcq/code/" && g++ test.cpp -lpthread -o test.out && ./test.out

父類有參構造x

子類有參構造x

------

父類拷貝構造

子類拷貝構造

------

C 繼承中的父類與子類的構造與析構

子類繼承父類後,當建立子類物件,也會呼叫父類的建構函式 問題 父類和子類的構造和析構順序是誰先誰後?class base base class son public base son void test01 intmain 執行結果 總結 繼承中 先呼叫父類建構函式,再呼叫子類建構函式,析構順序與構...

C 子類構造和析構被時,父類構造和析構的呼叫順序

構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承 子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法 因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅...

C 子類呼叫父類構造和析構函式的順序

include using namespace std class a class b public a int main 列印的結果是 construct a a construct b b destruct a a 一般情況下構造函式呼叫父類 子類 析構函式呼叫子類 父類 比如這麼寫 b a n...