子類物件包含多個組成部分(也就是多個子物件);
含有派生類自己定義的成員變數、成員函式的子物件;
該派生類所繼承的基類的子物件,這個子物件包含的是基類中定義的成員變數、成員函式(派生類物件含有基類對應的組成部分);
#include using namespace std;
class father
virtual ~father()
private:
int m_values;
};class son : public father
~son()
public:
int m_value_b;
};int main()
base
father: base是father的直接基類
son:base是sone的間接基類
繼承關係一直傳遞,構成了一種繼承鏈,最終的結果是son會包含它的直接基類的成員以及每個間接基類的成員
father這個類就是既當父類又當子類;
#include using namespace std;
class base
; ~base()
;};class father: public base
virtual ~father()
private:
int m_values;
};class son : public father
~son()
public:
int m_value_b;
};int main()
final:c++11中引入,加到基類後面,使其無法被繼承;
class base final
; ~base()
;};class father
//class father : public base 錯誤
virtual ~father()
private:
int m_values;
};
基類物件能獨立存在,也能作為派生類物件的一部分存在
father* father = new son(); //積累指標指向乙個派生類物件
father& q = *father; //基類引用繫結到派生類物件
son son;
father* father = &son; //可以
son* p_son = father; // 非法,編譯器通過靜態型別推斷轉換合法性,發現基類不能轉成派生類;如果基類中有虛函式,可以通過dynamic_cast轉換;
son* p_son = dynamic_castfather;
並不存在從基類到派生類的自動型別轉換
son* son = new father(); //非法
father father;
son &son = father; //非法,不能將基類轉換成派生類,派生類的引用不能繫結到基類物件上
son &son = &father; //非法,不能講基類轉成派生類,派生類指標不能指向基類位址
用派生類物件為乙個基類物件初始化或者賦值的時候,只有該派生類物件的基類部分會被拷貝或者複製,派生類部分將被忽略掉;
son son; //派生類物件;
father father(son); //用派生類物件來定義並初始化基類物件,這個會導致基類的拷貝建構函式的執行
基類和派生類
include include using namespace std class animal class dog public animal class dog public animal這裡的 就是繼承或派生,class cat public animal class item base st...
基類和派生類 this
基類指標在程式執行的時候的確指向的是乙個派生類的物件,但指標的型別仍然是基類指標。c 是一種強型別語言,因此不能用基類指標型別的指標直接呼叫派生類 而且,同乙個類可能有多種不同的派生類,因此不知道實際指向的會是哪個派生類。如果確信是某個派生類的話,可以用這樣的方法來呼叫 cb this b 1 cb...
關於基類指標 派生類指標 基類物件派 生類物件問題
1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...