【C++】一文帶你初識C++繼承

?????????????????????????????????????????

????????????????????????????????????????食用指南:本文在有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!??

?????????????????????????????????

?????????????????????????????????????????????????????????????????給個三連再走嘛~??????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40200.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS中的calc()函數有什么作用?

聚沙成塔每天進步一點點 ? 專欄簡介? CSS中的calc()函數及其作用? 作用? 示例1. 動態計算寬度&#xff1a;2. 響應式布局&#xff1a;3. 自適應字體大小&#xff1a;4. 計算間距&#xff1a; ? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點…

KCC@廣州開源讀書會廣州開源建設討論會

親愛的開源讀書會朋友們&#xff0c; 在下個周末我們將舉辦一場令人激動的線下讀書會&#xff0c;探討兩本引人入勝的新書《只是為了好玩》和《開源之迷》。作為一個致力于推廣開源精神和技術創新的社區&#xff0c;這次我們還邀請了圈內大咖前來參與&#xff0c;會給大家提供一…

軟件測試技術之單元測試—工程師 Style 的測試方法(3)

如何設計單元測試&#xff1f; 單元測試設計方法 單元測試用例&#xff0c;和普通測試用例的設計&#xff0c;沒有太多不同&#xff0c;常見的就是等價類劃分、邊界值分析等。而測試用例的設計其實也是開發者應該掌握的基本技能。 等價類劃分 把所有輸入劃分為若干分類&…

[UE4][C++]使用qrencode動態生成二維碼

一、使用CMake編譯x64版本qrencode 下載地址 GitHub - fukuchi/libqrencode: A fast and compact QR Code encoding libraryA fast and compact QR Code encoding library. Contribute to fukuchi/libqrencode development by creating an account on GitHub.https://github.…

2023/08/13_______JVM(CG)垃圾回收 算法(復制算法,標記清除,標記清除壓縮)

JVM GC算法 復制算法 1&#xff0c;每一次GC都會將伊甸&#xff08;Eden&#xff09;活的對象移到幸存區中&#xff1a;一旦Eden區被GC后 就會是空 只要有內容就是from區 誰空誰是to區 內存會從 伊甸->幸存區to->幸存from&#xff08;這個時候to和from交換區域&#xf…

EXPLAIN使用分析

系列文章目錄 文章目錄 系列文章目錄一、type說明二、MySQL中使用Show Profile1.查看當前profiling配置2.在會話級別修改profiling配置3.查看profile記錄4.要深入查看某條查詢執行時間的分布 一、type說明 我們只需要注意一個最重要的type 的信息很明顯的提現是否用到索引&…

kafka線上問題優化

如何防止消息丟失 生產者&#xff1a; 使用同步發送把ack設成1或者all&#xff08;非0&#xff0c;0可能會出現消息丟失的情況&#xff09;&#xff0c;并且設置同步的分區數>2 消費者&#xff1a;把自動提交改成手動提交 如何防止重復消費 在防止消息丟失的方案中&#…

leetcode 力扣刷題 數組交集(數組、set、map都可實現哈希表)

數組交集 349. 兩個數組的交集排序&#xff0b;雙指針數組實現哈希表unordered_setunordered_map 350. 兩個數組的交集Ⅱ排序 雙指針數組實現哈希表unordered_map 349. 兩個數組的交集 題目鏈接&#xff1a;349. 兩個數組的交集 題目內容如下&#xff0c;理解題意&#xff1a…

梯度爆炸和梯度消失的原因以及解決方法

文章目錄 1、原因&#xff1a;2、解決方法 1、原因&#xff1a; 梯度消失和梯度爆炸的根本原因是因為在反向傳播過程中&#xff0c;使用鏈式法則計算時&#xff0c;累積相乘效應導致梯度過大或者過小主要原因有&#xff1a; 1&#xff09;激活函數&#xff1a;例如sigmoid或者…

聊聊火車的發展

目錄 1.火車的概念 2.火車的發展歷史 3.火車對戰爭的影響 4.火車對人們出行造成的影響 1.火車的概念 火車是一種由機械動力驅動的陸上交通工具&#xff0c;通常用來運輸人員和貨物。它由一列或多列的連接在一起的車廂組成&#xff0c;有軌道作為其行駛的基礎&#xff0c;并通…

重建與突破,探討全鏈游戲的現在與未來

全鏈游戲&#xff08;On-Chain Game&#xff09;是指將游戲內資產通過虛擬貨幣或 NFT 形式記錄上鏈的游戲類型。除此以外&#xff0c;游戲的狀態存儲、計算與執行等皆被部署在鏈上&#xff0c;目的是為用戶打造沉浸式、全方位的游戲體驗&#xff0c;超越傳統游戲玩家被動控制的…

mysql面試

基礎篇 通用語法及分類 DDL: 數據定義語言&#xff0c;用來定義數據庫對象&#xff08;數據庫、表、字段&#xff09;DML: 數據操作語言&#xff0c;用來對數據庫表中的數據進行增刪改DQL: 數據查詢語言&#xff0c;用來查詢數據庫中表的記錄DCL: 數據控制語言&#xff0c;用…

php正則替換文章的圖片

要使用正則表達式替換文章中的圖片鏈接&#xff0c;可以按照以下步驟進行操作&#xff1a; 1. 獲取文章內容&#xff1a;首先&#xff0c;你需要獲取包含圖片鏈接的文章內容。你可以從文件中讀取文章&#xff0c;或者從數據庫中檢索文章內容。 2. 使用正則表達式匹配圖片鏈接…

JAVA編程學習筆記

常用代碼、特定函數、復雜概念、特定功能……在學習編程的過程中你會記錄下哪些內容&#xff1f;快來分享你的筆記&#xff0c;一起切磋進步吧&#xff01; 一、常用代碼 在java編程中常用需要儲備的就是工具類。包括封裝的時間工具類。http工具類&#xff0c;加解密工具類&am…

day17 | 110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和

目錄&#xff1a; 解題及思路學習 110.平衡二叉樹 https://leetcode.cn/problems/balanced-binary-tree/ 給定一個二叉樹&#xff0c;判斷它是否是高度平衡的二叉樹。 本題中&#xff0c;一棵高度平衡二叉樹定義為&#xff1a; 一個二叉樹每個節點 的左右兩個子樹的高度差…

Linux學習之firewallD

systemctl status firewalld.service查看一下firewalld服務的狀態&#xff0c;發現狀態是inactive (dead)。 systemctl start firewalld.service啟動firewalld&#xff0c;systemctl status firewalld.service查看一下firewalld服務的狀態&#xff0c;發現狀態是active (runni…

okcc呼叫系統導入呼叫名單/客戶資料的數量上限,okcc通話聲音小有哪幾種處理辦法?

系統導入呼叫名單/客戶資料的數量上限 呼叫名單一次最多十萬 客戶資料一次最多五萬 通話聲音小有哪幾種處理辦法&#xff1f; 1、IP話機&#xff1a;通過話機上的音量調節按鈕來進行調節。 2、模擬話機&#xff1a;修改語音網關上的增益來實現。 “ 往IP增益”表示電話呼入…

stable diffusion 運行時報錯: returned non-zero exit status 1.

運行sh run.sh安裝stable diffusion時報錯&#xff1a;ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因&#xff1a;python版本過低&#xff0…

ubuntu16.04制作本地apt源離線安裝

一、首先在有外網的服務器安裝需要安裝的軟件&#xff0c;打包deb軟件。 cd /var/cache/apt zip -r archives.zip archives sz archives.zip 二、在無外網服務器上傳deb包&#xff0c;并配置apt源。 1、上傳deb包安裝lrzsz、unzip 用ftp軟件連接無外網服務器協議選擇sftp…

股票交易c接口包含哪些調用函數?

股票交易的C接口中可能包含多個調用函數&#xff0c;具體的調用函數取決于所使用的接口規范和交易所的要求。接下來看看下面是一些可能常見的股票交易C接口調用函數的示例&#xff1a; 1. 連接函數&#xff08;Connect&#xff09;&#xff1a;用于與交易所建立網絡連接。 2.…