- 📢博客主頁:https://loewen.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 丶布布原創,首發于 CSDN,轉載注明出處🙉
- 📢現在的付出,都會是一種沉淀,只為讓你成為更好的人?
文章預覽:
- 一. 派生類概念
- 二. 派生類對象定義時,調用構造函數的順序
- 三. 繼承方式
- 四. 函數遮蔽
一. 派生類概念
派生類:在C++
中,繼承就是在一個已存在的類的基礎上建立一個新的類。已存在的類稱為「基類」,又稱為「父類」;新建立的類稱為「派生類」,又稱為「子類」。
繼承:「派生類」從已有的「基類」那里獲得其相關特性(一些公用的成員變量和成員函數),這種現象稱為類的繼承。「繼承」是面向對象程序設計的核心思想之一。好處:可以減少代碼量,這樣在寫派生類的時候,只寫與派生類相關的成員變量和成員函數即可,公用的相關功能可以直接從基類中繼承使用。
繼承的書寫格式:class
子類名
:
繼承方式(public/protected/private)
父類名
舉例:
class Human //父類
{
public:Human();Human(int &a); ~Human();void print(){std::cout << "執行了Human的成員函數print()" << std::endl;}public: int m_age; //年齡char m_name[100]; //名字
};
#include "Human.h"class Man : public Human //繼承:表示Man是Human的子類
{
public:Man();~Man();private:int m_num;
};
#include "Human.h"
#include "man.h"int main()
{Man man; //定義一個子類的對象 man.print(); //通過<對象.>的方式可以調用父類的函數print()man.m_num; //通過<對象.>的方式可以調用自己的變量system("pause");return 0;
}
二. 派生類對象定義時,調用構造函數的順序
繼續上面的來:
Human::Human()
{std::cout << "執行了Human::Human()默認構造函數" << std::endl;
}
Man::Man()
{std::cout << "執行了Man::Man()默認構造函數" << std::endl;
}
int main()
{Man man; / //當定義子類對象時,父類的構造函數也會調用的 system("pause");return 0;
}
可以看出,當定義子類Man對象時,不僅僅調用了子類Man的構造函數,也調用了父類Human的構造函數,而且是先調用。
三. 繼承方式
🐕 三種訪問權限:
- public:可以被任意實體訪問;
- protected:只允許子類及本類的成員函數訪問;
- private:只允許本類的成員函數訪問
🐪 三種繼承方式:public
繼承 、 protect
繼承和private
繼承
基類中的訪問權限 | 子類繼承基類的方式 | 子類得到的訪問權限 |
---|---|---|
public | & public繼承 | public |
protected | & public繼承 | protected |
private | & public繼承 | 子類無權訪問 |
public | & protected繼承 | protected |
protected | & protected繼承 | protected |
private | & protected繼承 | 子類無權訪問 |
public | & private繼承 | private |
protected | & private繼承 | private |
private | & private繼承 | 子類無權訪問 |
🐩 總結:
public
繼承基類:不改變基類成員的訪問權限;protected
繼承基類:將基類中public
成員變為子類的protected
成員,其它成員的訪問權限不變;private
繼承基類:使得基類所有成員在子類中的訪問權限變為private
;- 基類中的
private
成員不受繼承方式的影響,子類永遠無權訪問; - 對于基類來講,尤其是基類的成員函數,如果不想讓外面訪問,就設置為
private
;如果想讓子類能夠訪問,就設置為protected
;如果想公開,就設置為public
;
四. 函數遮蔽
子類中如果有和父類一樣的同名函數,那么子類對象則無法訪問調用父類中的同名函數。
解決措施如下:
1、在子類的成員函數中,通過父類::同名函數來強制調用父類函數;
2、通過關鍵字using
讓父類的同名函數在子類中可見;
ps:通過關鍵字using
方法只適合子類和父類中的函數同名不同參數情況,可通過該方式調用父類同名函數;若子類和父類中的函數同名同參數情況,則還需使用方法一;
下雨天,最愜意的事莫過于躺在床上靜靜聽雨,雨中入眠,連夢里也長出青苔。 |