學習C++、QT---12(C++的繼承、權限對繼承的影響)

每日一言

????????你的價值,由你自己定義,無需他人評判。

?

C++的繼承

直接上案例

繼承是什么意思呢,就是我本來這個類我叫他基類、我希望創建我的下一個類有我這之前的類的屬性和方法,那么我如果不用繼承的話,就需要多寫很多一樣的代碼,那么就是不好,不性感,那么這邊有個叫做繼承的概念,可以讓我們新創建的類去繼承我們的之前的類,而且現在新創建的類不寫之前的類的屬性和方法,我們也可以進行使用,當做自己寫了這些屬性和方法,那么我們也可以添加新的屬性和方法,這個就叫做繼承

我們稱之前的那個被繼承的類叫做父類、基類,新的那個類叫做子類、派生類

我們這邊用了一個案例 ?一個叫做手機類 一個叫做蘋果這個類

那么很明顯手機類是父類,蘋果類是子類,那么我們的手機類中的屬性,我們的子類也可以用,怎么繼承呢??用什么符號?我們寫子類的時候這樣寫

我們一般寫寫類不是就是這樣寫的嗎 class phone{}這就結束了。但是我們是要作為子類去繼承父類的所以我們要加上 :

這個public是什么意思呢,就是說我們的子類要是想用父類的屬性或者方法,即使父類那邊寫了public都不行,也會變成private ,所以我們就需要自己加上public,這樣我們就可以隨心所欲調用父類的屬性和方法了,

像我們main函數里面就是子類調用的父類的屬性name ?,但是我們子類并沒有寫這個屬性,所以這個就是繼承的好處,不僅僅是省去了代碼,提高了代碼的復用,還有很多其他的好處在未來我們玩更大的項目的時候就可以體會的到了

分文件優化繼承

這個是什么操作呢?是不是和我們在c51的時候之前學的分文件優化代碼很像,確實很像啊,就是為了不讓我們的代碼那么多,又臭又長,那么我們要進行分文件處理,就是本來300行的代碼,什么鬼都有,類的聲明和實現也在,什么都有,現在我將它們單獨分在一個文件里面,這樣不就好了嗎,這個就是分文件優化代碼的意義。

那么開始吧!!!

事先說好哈我們要繼承父類嘛,所以我提前用以下的方法創建了一個類叫做Animal

步驟1,右鍵項目

選擇C++class

輸入Dog(子類名)

這個Base class就是繼承的意思,然后我們目前的話可以自己寫上去如下圖的Animal

創建文件后會自動跳到dog.h文件發現不認識Animal,因為要包含animal.h這個頭文件,我們這個創建的Dog類的話,會生成dog.cpp和dog.h文件

添加后,我們也把函數的聲明寫出來,那么此時我們不是需要將函數的實現寫出來嗎,哪里寫在dog.cpp也就是該類的cpp文件里面寫,這邊有個快捷的方法,就是右鍵我們的函數,就是右鍵我們寫好的 dogShout()這個函數,里面有個Refactor(重構)的里面有個在dog.cpp中添加定義

那么就來到了我這張圖

我們將函數進行實現

實現完之后我們來到mian.c文件,這邊就是我們的主戰場了,和我們之前的是一個意思,我們創建Dog的實例化對象,會發現不認識Dog,那么我們就知道需要添加dog.h頭文件了

然后我們就實現了

這個就是我們的分文件優化繼承,

權限對繼承的影響

主要是記住這張圖權限對繼承的影響圖,

我拋出代碼我進行講解

這個就是我進行測試的代碼了,什么意思呢

  1. 我在基類中創建了public、protected、private屬性的變量

好的現在我創建了一個名為TestClass的子類去使用private屬性去繼承父類,

那么此時我們要知道,我們使用任何屬性繼承父類后,父類中的屬性都有可能會被降級,降級什么意思呢就是父類的public屬性的成員變量,會變成protected屬性的成員變量,或者是其他的降級

因此我們就要進行判斷權限的變化

好的,我們這邊使用private屬性去繼承父類,那么父類中的public屬性的變量會變成private ?protected屬性的變量會變成private ,然后private屬性的話本來就不能被繼承,要說降級的話可以是說降級到不可訪問

那么我們就可以根據權限變完后的的權限等級我們去看這張表,看一下有那些數據我們可以如何去調用,比如有些只能在類內部被調用,有些類外部可以被調用,等等

我們結合案例,我們這邊,進行private繼承后會發現,父類的public權限的變量和protected權限的變量都降級成了private,那么我們根據上面那張表可以知道,此時只有類內部可以調用private權限的變量,所以我們這個price可以被調用,不會報錯,當然protectedData=10;這個protect權限的變量也不會報錯,也是可以的調用的

看我們也在類的外部創建了一個對象來進行調用price,那么肯定是不行的,因為我們可以根據那張表來看,類外部是不允許調用protected權限的變量的

其實其他的也都是這樣子來判斷,主要就是結合我們的這兩張表來進行判斷,要熟記于心噢,這邊我只用一個來解釋,其他兩個子類的調用的操作,得出報錯還是不報錯,也是這樣去了解的

總結來說:子類用不同的權限去繼承父類,那么父類中的權限屬性變量 會發生降級的影響,也就是權限會變低,我們俗稱權限的高低由public->protected->private依次降級。

那么我們根據變化后的權限要知道,我們在不同的區域塊(類內部、同一個類的對象、子類、類外部),對這些權限的變量的調用許可,做到這一點就行了

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

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

相關文章

(6)Wireshark的TCP包詳解-上篇

1.簡介 上一篇中通過介紹和講解,應該知道要講解和介紹的內容在哪里了吧,沒錯就是介紹OSI七層模型的傳輸層。因為只有它建立主機端到端的連接如:TCP、UDP。 2.TCP是什么? tcp是工作在傳輸層,也就是網絡層上一層的協議。 它是面…

太極八卦羅盤JS繪制

LeaferJS 是一款好用的 Canvas 引擎,通過LeaferJS繪制羅盤案例. https://www.leaferjs.com/ui/guide/ 示例 太極八卦羅盤 直接上代碼 <template><div id"LuoPan"></div><div id"info"><p>屏幕寬度: {{ screenWidth }}px<…

Python開源項目月排行 2025年5月

#2025年5月2025年6月1日1scrapy一個開源的、基于 Python 的高性能網絡爬蟲和數據抓取框架。Scrapy 項目最初由倫敦的網絡聚合和電子商務公司 Mydeco 的員工以及烏拉圭蒙得維的亞的網絡咨詢公司 Insophia 的開發者共同創建。目前&#xff0c;Scrapy 由 Zyte&#xff08;原名 Scr…

Debezium日常分享系列之:在 Kubernetes 中使用 Debezium 的 CDC

Debezium日常分享系列之&#xff1a;在 Kubernetes 中使用 Debezium 的 CDC 架構源數據庫創建數據庫憑證密鑰Debezium 自定義鏡像構建并推送鏡像Kafka Connect 集群Debezium Postgres 連接器Debezium 創建的 Kafka 主題 Debezium 是一個開源的分布式變更數據捕獲 (CDC) 平臺。D…

tf serving和torch serve哪個耗時更低

TensorFlow Serving&#xff08;TF Serving&#xff09;和 TorchServe 的耗時對比需結合具體場景&#xff08;如硬件配置、模型類型、優化策略等&#xff09;&#xff0c;以下從多維度分析兩者的性能差異及適用場景。 ?? 1. 標準性能基準對比 根據公開壓測數據&#xff08;…

Java面試寶典:基礎六

133. 二進制小數點位移 答案:C(乘以2) 解析: 原理:二進制小數點右移一位等價于乘以 (2^1)(左移則除以 (2))。示例: 101.1(5.5)右移 → 1011(11)驗證:(5.5 \times 2 = 11)說明:位移前:1 0 1 . 1 (值 = 2+2?+2? = 5.5) 位移后:1 0 1 1 . (值 = 2+2+2? =…

04-React中綁定this并給函數傳參的幾種方式

前言綁定 this 的方式一&#xff1a;bind()綁定 this 并給函數傳參 的方式二&#xff1a;構造函數里設置 bind()綁定 this 并給函數傳參 的方式三&#xff1a;箭頭函數【薦】 前言 我們先來看下面這段代碼&#xff1a; components/MyComponent.jsx import React from "…

Docker拉取不兼容的鏡像解決辦法

錯誤提示如下&#xff1a; WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested295ef35cfefe0dce6904e017e89218695d9a9c092b45496218f4476357be4f9c 這個警告表明你…

android14 未充電狀態電量低于15%彈框提示 10%直接關機

上層接收電量變化廣播&#xff0c;添加未充電判斷&#xff0c;做出彈框或關機動作 SystemUI\src\com\android\systemui\power\PowerUI.java Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();if (PowerManager.ACTION_POWE…

ASP.NET Core 中 Kestrel 的應用及在前后端分離項目中的角色

目錄 一、Kestrel 基礎&#xff1a;輕量級且高性能的 Web 服務器 二、前后端分離項目架構&#xff1a;Vue、.NET Core API、Nginx 與 Kestrel 2.1 交互流程圖 2.2 流程詳解 三、Kestrel 在架構中的核心作用 四、launchSettings.json 與 Kestrel 配置的關系及底層機制 4.1…

Kotlin 退出循環總結

文章目錄 Kotlin 退出循環總結for循環forEach()嵌套for循環lambda函數inline函數 Kotlin 退出循環總結 for循環 for ((index, value) in list.withIndex()) {if (value "c") {break // 退出循環}println("$index - $value") }// 0 - a // 1 - bfo…

再看C語言

目錄 與Java的差異化 編程范式 跨平臺 編譯過程 包管理 基本類型 內存結構 重點掌握 進制、字節與計算 指針 結構體 關鍵詞 動態內存 模塊化 高級特性 動態鏈接 虛擬內存 打包編譯 并發編程 現在需要參與到存儲軟件開發工作&#xff0c;存儲層比較接近OS系統…

機器學習入門 | 訓練、推理與其他機器學習活動(預處理、測試與評估)

在訓練階段&#xff0c;訓練算法通過優化目標/損失函數在訓練數據集上的表現&#xff0c;不斷更新模型參數θ。在監督學習場景中&#xff0c;訓練數據集由輸入-標簽對&#xff08;真實輸出值&#xff09;組成。目標函數應當獎勵模型根據訓練輸入成功預測真實輸出的行為&#xf…

Node.js特訓專欄-實戰進階:11. Redis緩存策略與應用場景

&#x1f525; 歡迎來到 Node.js 實戰專欄&#xff01;在這里&#xff0c;每一行代碼都是解鎖高性能應用的鑰匙&#xff0c;讓我們一起開啟 Node.js 的奇妙開發之旅&#xff01; Node.js 特訓專欄主頁 專欄內容規劃詳情 Redis 緩存策略與應用場景&#xff1a;從理論到實戰的高…

【stm32】HAL庫開發——Cube配置基本定時器

目錄 一、Cube配置基本定時器 1.定時器CubeMX配置介紹 2.定時器中斷控制LED 3.定時器常用函數 4.定時器從模式&#xff08;Reset Mode&#xff09; 5.定時器的從模式&#xff08;Gated Mode&#xff09; 6.定時器的編碼器接口 一、Cube配置基本定時器 1.定時器CubeMX配置…

nginx反向代理后端服務restful及token處理

#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; } #代理mysql服務 stream {upstream mysql_backend {server 192.168…

正確理解Cola StateMachine不內置事務管理機制

? 正確理解&#xff1a;Cola StateMachine 并非“不支持”事務一致性&#xff0c;而是“不內置”事務管理機制 因為&#xff1a; Cola StateMachine 是輕量級、無狀態、不依賴 Spring 的框架&#xff0c;它本身 不綁定任何事務上下文。它不像 Spring StateMachine 那樣自動與…

AudioTrack使用

** AudioTrack ** AudioTrack 是 Android 音頻系統中的核心類&#xff0c;用于播放原始音頻數據&#xff08;PCM&#xff09;或壓縮音頻&#xff08;如 MP3、AAC&#xff09;。它提供了低級別的音頻播放控制&#xff0c;適合需要精細管理的場景&#xff08;如游戲音效、實時音…

解密:MySQL 的常見存儲引擎

在數據庫領域&#xff0c;MySQL 作為一款廣受歡迎的關系型數據庫管理系統&#xff0c;提供了多種存儲引擎以滿足不同應用場景的需求。每種存儲引擎都有其獨特的特性、優勢和適用場景。本文將深入探討 MySQL 中幾種常見的存儲引擎&#xff0c;包括 InnoDB、MyISAM、MEMORY 和 AR…

qt和qtcreator版本關系

實例展示&#xff1a; 如圖所示的qtcreator是使用qt5.15安裝過程選擇勾選了qtcreator 14.0.2&#xff0c;安裝完成qtcreator版本信息&#xff1a; 安裝過程中選擇了這些構件kits&#xff0c;會自動識別到&#xff1a; 使用qt5.9.9另外安裝的kits&#xff0c;需要手動設置才能識…