C++继承中关于子类构造函数的写法
構造方法用來初始化類的對象,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變量和成員方法,但不繼承父類的構造方法)。因此,在創建子類對象時,為了初始化從父類繼承來的數據成員,系統需要調用其父類的構造方法。
??? 如果沒有顯式的構造函數,編譯器會給一個默認的構造函數,并且該默認的構造函數僅僅在沒有顯式地聲明構造函數情況下創建。
構造原則如下:
??? 1. 如果子類沒有定義構造方法,則調用父類的無參數的構造方法。
??? 2. 如果子類定義了構造方法,不論是無參數還是帶參數,在創建子類的對象的時候,首先執行父類無參數的構造方法,然后執行自己的構造方法。
??? 3. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數,則會調用父類的默認無參構造函數。
??? 4. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類自己提供了無參構造函數,則會調用父類自己的無參構造函數。
??? 5. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類只定義了自己的有參構造函數,則會出錯(如果父類只有有參數的構造方法,則子類必須顯示調用此帶參構造方法)。
??? 6. 如果子類調用父類帶參數的構造方法,需要用初始化父類成員對象的方式,比如:
#include <iostream.h>2 3 class animal4 {5 public:6 animal(int height, int weight)7 {8 cout<<"animal construct"<<endl;9 } 10 … 11 }; 12 13 class fish:public animal 14 { 15 public: 16 fish():animal(400,300) 17 { 18 cout<<"fish construct"<<endl; 19 } 20 … 21 }; 22 void main() 23 { 24 fish fh; 25 }?
轉載于:https://www.cnblogs.com/rednodel/p/9303219.html
總結
以上是生活随笔為你收集整理的C++继承中关于子类构造函数的写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python并发编程:多线程-死锁现象与
- 下一篇: DRF (Django REST fra