?????????????????????????????????????????
????????????????????????????????????????食用指南:本文在有C基礎的情況下食用更佳??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?🍀本文前置知識:?C++類?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??今日夜電波:napori—Vaundy
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1:21?━━━━━━?💟──────── 3:23
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????🔄 ? ?? ? ? ? ?? ? ???
??????????????????????????????????????💗關注👍點贊🙌收藏您的每一次鼓勵都是對我莫大的支持😍?
目錄
🍑一、繼承和派生的概述
🍒?二、繼承的語法
派生類定義格式:
繼承方式分類:
基類個數分類:
派生類繼承基類的規則 :
🍈三、繼承中的構造函數和析構函數
構造和析構的順序
??🍉子類中的構造(重要)
知識點1:
?知識點2:
🥝四、父類和子類的同名處理
成員變量的處理
?成員函數的處理
🍑一、繼承和派生的概述
?? ? ? ?在C++中,繼承是一種對象-oriented編程(面向對象編程)的概念,它允許創建一個新的類(稱為派生類)從一個現有的類(稱為基類)繼承屬性和行為。通過繼承,派生類可以獲得基類的成員變量、成員函數和其他特性。
????????繼承有幾種類型:公有繼承、私有繼承和受保護的繼承。在公有繼承中,基類的公有成員在派生類中仍然是公有的;在私有繼承中,基類的公有成員在派生類中變為私有的;在受保護的繼承中,基類的公有成員在派生類中變為受保護的。
????????派生類可以通過繼承來擴展基類的功能,它可以添加新的成員變量和成員函數,也可以重寫基類的成員函數以改變其行為。派生類還可以訪問基類的非私有成員。
????????繼承的優點:減少代碼的冗余 提高代碼的重用性
? ? ? ? ?一圖讓你認識繼承和派生的概念~
🍒?二、繼承的語法
派生類定義格式:
????????注意以下兩個格式都是一樣的,定義以及意義都是相同的!
class 子類: 繼承方式 父類名{//子類新增的數據成員和成員函數};Class 派生類名 : 繼承方式 基類名{//派生類新增的數據成員和成員函數};
繼承方式分類:
????????public : 公有繼承 (重要)
????????private : 私有繼承
????????protected : 保護繼承
基類個數分類:
單繼承:指每個派生類只直接繼承了一個基類的特征 (一個父類 派生出 一個子類)
多繼承:指多個基類派生出一個派生類的繼承關系,多繼承的派生類直接繼承了不止一個基
類的特征(多個父類 派生出 一個子類)
?
注意:
????????子類繼承父類,子類擁有父類中全部成員變量和成員方法(除了構造和析構之外的成員方法),但是在子類中,繼承的成員并不一定能直接訪問,不同的繼承方式會導致不同的訪問權限。
派生類繼承基類的規則 :
?????????一圖讓你理解~
🍈三、繼承中的構造函數和析構函數
構造和析構的順序
class Other{public:Other(){cout << "對象成員的構造函數" << endl;}~Other(){cout << "對象成員的析構函數" << endl;}};class Base {public:Base(){cout << "父類的無參構造函數" << endl;}~Base(){cout << "父類中的析構函數" << endl;}};class Son :public Base{public:Son(){cout << "子類的無參構造" << endl;}~Son(){cout << "子類中的析構函數" << endl;}Other ob;//對象成員};void test01(){Son ob1;}
????????運行結果如下:
?????????一圖讓你理解~
??🍉子類中的構造(重要)
????????先看以下代碼:
????????父類
class Base{private:int a;public:Base(){cout << "父類的無參構造函數" << endl; }Base(int a){this-> a = a;cout << "父類的有參構造函數" << endl;}~Base(){cout << "父類中的析構函數" << endl;}};
知識點1:
????????子類會默認調用 父類的 無參構造
????????子類1:
class Son :public Base{private:int b;public:Son(){cout << "子類的無參構造" << endl;}Son(int b){this->b = b;cout << "子類的有參構造函數int" << endl;}~Son(){cout << "子類中的析構函數" << endl;}};void test01(){ Son ob1(10);}
? ? ? ? 運行結果:
?知識點2:
????????子類 必須顯示 使用初始化列表 調用 父類的有參構造
?????????子類2:
class Son :public Base{private:int b;public:Son(){cout << "子類的無參構造" << endl;}Son(int b){this-> b = b;cout << "子類的有參構造函數int" << endl;}//子類必須用 初始化列表 顯示的調用父類的有參構造//父類名稱(參數)Son(int a, int b) :Base(a)//顯示的調用父類的有參構造{this-> b = b;cout << "子類的有參構造函數 int int" << endl;}~Son(){cout << "子類中的析構函數" << endl;}};void test01(){ //子類 默認 會調用 父類的無參構造//子類必須用 初始化列表 顯示的調用父類的有參構造//父類名稱+()Son ob2(10, 20);}
????????運行結果:
?
🥝四、父類和子類的同名處理
成員變量的處理
????????1、當 父類和子類 成員變量同名時 在子類就近原則 選擇本作用域的子類成員
????????2、如果在子類中 必須使用父類中的同名成員 必須加上父類的作用域。
?????????栗子:
class Base{//父類的私有數據 一旦涉及繼承 在子類中不可見public:int num;public:Base(int num){this-> num = num;cout << "Base有參構造int" << endl;}~Base(){cout << "析構函數" << endl;}};class Son :public Base{private:int num;public:Son(int num1, int num2) :Base(num1){this-> num = num2;cout << "有參構造int int" << endl;}~Son(){cout << "析構函數" << endl;}void showNum(void){//如果在子類中 必須使用父類中的同名成員 必須加上父類的作用域cout << "父類中的num = " << Base::num << endl; //當 父類和子類 成員變量同名時 在子類就近原則 選擇本作用域的子類成員cout << "子類中的num = " << num << endl;}};void test01(){Son ob1(10, 20);ob1.showNum();}
????????運行結果:
?成員函數的處理
????????1、子類繼承父類所有成員函數 和成員變量
????????2、一旦子類 實現了 父類的同名成員函數 將屏蔽所有父類同名成員函數
??????????栗子:?
class Base{public:void func(void){cout << "父類中的void func" << endl;}void func(int a){cout << "父類中的int func a = " << a << endl;}};class Son :public Base{public://一旦子類 實現了 父類的同名成員函數 將屏蔽所有父類同名成員函數void func(void){cout << "子類中voidfunc" << endl;}};void test01(){//為啥構造和析構除外?父類的構造和析構 只有父類自己知道該怎么做(構造和析構 系統自動調用)//子類會繼承父類所有成員函數(構造和析構函數除外) 和成員變量Son ob1;ob1.func();//ob1.func(10);//err //一旦子類 實現了 父類的同名成員函數 將屏蔽所有父類同名成員函數//如果用戶 必須要調用父類 的同名成員函數 必須加作用域ob1.Base::func();//調用父類的void funcob1.Base::func(10);//調用父類的int func}
????????運行結果:
? ? ? ? ?本文僅僅為對于C++中繼承的基礎知識,重要的還是在虛函數那一塊,下一篇,我會詳細的介紹虛函數!希望大家繼續支持Thanks?(・ω・)ノ
????????????????感謝你耐心的看到這里?( ′・?・` )比心,如有哪里有錯誤請踢一腳作者o(╥﹏╥)o!??
?????????????????????????????????
?????????????????????????????????????????????????????????????????給個三連再走嘛~??????