1. 程式人生 > 其它 >C++繼承與多型

C++繼承與多型

繼承按照繼承的父類的宣告順序呼叫父類的建構函式,然後按照內部類的宣告順序呼叫內部類的建構函式,最後呼叫本地類的建構函式
如果父類也有繼承,在初始化父類時也要按照這個順序來初始化,是遞迴的
如果是virtual繼承,被virtual的類只有一份,不會每個子類生成一份

析構的時候按照構造的相反順序呼叫解構函式

如果成員函式是多型函式,根據指標實際指向的物件呼叫物件自己的多型函式,如果不是,呼叫指標對應的類的函式,找不到就呼叫父類的

A a;
B b = a; 呼叫的是拷貝構造,因為此時b不存在
//-----------------------------
A a;
B b;
b = a; 呼叫的是賦值構造,因為此時b已存在

delete (A*)nullptr; 無效果,不會崩潰,也不呼叫析構

拷貝建構函式可以淺拷貝,但是釋放的指標成員的時候就會出現多次釋放的情況
如果不想多次釋放就需要將被拷貝的物件的指標成員賦空,
但是這樣需要將被拷貝的物件對應的引數的const屬性cast掉,還讓原來的物件不能找到指標指向的內容了
既不方便也不合理
而移動構造操作的都是臨時物件,指標成員可以賦空,因為以後肯定不用它了,找不到沒事
所以移動構造都會使用淺拷貝,並且將臨時物件指標成員賦空,防止多次釋放