c++之繼承
阿新 • • 發佈:2021-01-04
繼承的基本語法
語法: class 子類:繼承方式 父類
子類 也稱為 派生類
父類 也成為 基類
派生類中的成員,包括兩部分
一類是從基類繼承過來的,一類是自己增加的成員
從基類繼承過來的表現得其共性,而新增的成員體現了其個性
注:子類會繼承父類的所有非靜態成員屬性,而訪問靜態成員屬性要看父類的許可權
繼承方式
1、公共繼承 父類中的公共許可權成員通過公共許可權繼承到子類依然是公共許可權 父類中的保護許可權成員通過公共許可權繼承到子類依然是保護許可權 父類中的私有許可權成員不可以訪問 2、保護繼承 父類中的公共許可權成員通過公共許可權繼承到子類變為保護許可權 父類中的保護許可權成員通過公共許可權繼承到子類依然是保護許可權 父類中的私有許可權成員不可以訪問 3、私有繼承 父類中的公共許可權成員通過公共許可權繼承到子類變為私有許可權 父類中的保護許可權成員通過公共許可權繼承到子類變為私有許可權 父類中的私有許可權成員不可以訪問
這裡需要注意的是,這裡父類中的私有成員子類無法訪問,並不是子類沒有繼承,只是編譯器隱藏了
#include<iostream> using namespace std; class Base { public: int m_A; protected: int m_B; private: int m_C; }; class Son :public Base { public: int m_D; }; void test01() { cout << "size of son is " << sizeof(Son) << endl; //輸出16 所以在父類中所有非靜態成員屬性都會被子類繼承下去 //父類中的私有成員屬性,是被編譯器隱藏了,但是確實是繼承了 } int main() { test01(); system("pause"); return 0; }
//利用開發人員命令提示工具檢視物件模型
/*
1、跳轉碟符 D:
2、跳轉檔案路徑 cd 路徑
3、cl /d1 reportSingleClassLayout類名 檔名(tab鍵)
*/
繼承中的構造和析構順序
子類繼承父類後,當建立子類物件,也會呼叫父類的建構函式
先呼叫父類的建構函式,在呼叫子類的建構函式 析構和構造的順序是相反的
繼承同名成員的處理方式
當子類與父類出現了同名的成員時
訪問子類的同名成員,直接訪問即可
訪問父類的同名成員,需要加作用域 子類物件.作用域::屬性/函式
如果子類中出現和父類同名的成員函式,子類的同名成員函式會隱藏掉父類所有的同名函式(包括過載函式)