繼承:(開始C++的進階)

我們今天來學習C++的進階:

面向對象三大特性:封裝,繼承,多態。

封裝我們在前面已經學了,我們細細理解,我們的類的封裝,迭代器的封裝(vector的迭代器可以是他的原生指針,list迭代器不能是他的原生指針,我們進行封裝),適配器的封裝(stack和queue的封裝)。

我們今天就來學習他的第二大特性:繼承;

繼承:

繼承其實就是我們把公共的成員提取出來,方成一個單獨的類,然后讓下面的類去繼承;

這個就是設計層次的類的復用。

我們來看我們的繼承:

下?我們看到沒有繼承之前我們設計了兩個類Student和Teacher,Student和Teacher都有姓名/地址/ 電話/年齡等成員變量,都有identity?份認證的成員函數,設計到兩個類??就是冗余的。當然他們也有?些不同的成員變量和函數,?如?師獨有成員變量是職稱,學?的獨有成員變量是學號;學?的獨有成員函數是學習,?師的獨有成員函數是授課。

我們看我們的上面的兩個類,這兩個類分別是代表的是學生和老師,但是我們發現這兩個類的話,其中有一部分的函數和變量是一樣的,他們有相同的成員變量和成員函數。

這樣的話,設計是不是有一點冗余呢?是的。

這時候就是我們的繼承的用法了:

我們看這個類,我們把這兩個都有的類放到一起,構成一個新的類,這個新的類我們叫做父類。

我們看下面:

我們這里的繼承是公有的繼承,我們使用了public:來進行繼承;

然后我們看我們現在的Student和Teacher類,這兩個類現在里面有的數據就是他們自己也特有的數據,那他們以前的數據怎么辦呢?

我們把他們之前的數據存起來的(父類)繼承下來,繼承給他們。這時候這兩個類還是可以調用以前的函數和成員變量,他們都是還在的。

然后這些繼承父類的類,我們叫他子類。

繼承的方式:

如果我們想在父類里面和外面使用的話,我們就定義為public。

如果想在父類里面使用,外面不能使用的,但是繼承的子類可以使用,我們就定義為protect。

如果父類里面使用,外面不能使用,繼承的子類也不能使用的話,我們就定義為private。

當然如果是父類里面的private成員,無論怎樣繼承我們的子類都是不可見的,但是我們還有一種方法在子類中得到這個,我們可以在父類的public區域里面創建一個函數,

我們看這個代碼,我們在我們的父類的public區域里面創造一個函數,父類的話,我們是可以使用我們的父類的private的成員變量的。在這個函數我們對我們的private的變量進行調整。

這個public的成員函數我們的繼承的子類里面是可以調用的。

繼承類模板:

我們的類模板也是可以被繼承的:

我們之前實現我們的容器適配器Stack的時候,我們把我們的容器vector傳過去,現在的話,我們把我們的vector繼承給我們的Stack;

但是這個方式是沒有我們之前學習Stack的時候,實現的,我們使用的組合的方式實現效果好的。

基類和派生類之間的轉換:

我們看這個圖片:Person表示我們的基類,Student表示我們的派生類。

臨時對象:

我們看這個,我們之前學習的,我們看第一個圖片,我們的i賦值給d,int類型的賦值給double類型的,里面存在著隱式類型轉換,如果有隱式類型轉換的話,他就會產生臨時對象。

這時候我們看第二個圖片,如果我們加上引用的符號的話,這時候就會報錯,因為我們的臨時對象具有常性,所以我們要引用的話就要加上const。這才是對的。

我們再看我們的自定義類型的:

我們的這個string,我們說單參數的構造函數支持隱式類型轉換,這里"1111"const char*類型的字符串字面量,這是一個常量字符串,編譯器會隱式調用std::string對應的單參數構造函數,將const char*類型的"1111"轉換為std::string類型,并初始化s1?。

我們的第二行的這個代碼,我們引用了一個臨時對象,還是臨時對象具有常性。使用const防止被修改。

在 C++ 中,單參數的構造函數支持隱式類型轉換,是指當一個構造函數只有一個參數時,編譯器可以自動使用該構造函數將參數類型轉換為類類型。

在上述代碼中,MyClass類有一個接受int類型參數的單參數構造函數。在main函數中,使用int類型的10初始化MyClass類型的對象obj,此時編譯器會自動調用單參數構造函數,將10隱式轉換為MyClass類型的對象。

這個都會產生臨時對象;

但是我們這里的沒有產生臨時對象;這里我們的是特殊處理;他叫復制兼容轉換;

我們繼續看:

我們的派生類對象可以賦值給我們的基類的對象(這個我們后面講解),但是我們的基類的對象不能賦值給我們的派生類。

繼承中的作用域:

我們說我們的基類和派生類都有他自己的作用域。

這兩個不同的作用域,我們可以有相同名字的變量。

我們看這個圖片,當我們的基類和我們的派生類里面都有我們的相同名字的成員變量的時候,我們在我們的派生類里面,我們訪問同名的成員變量的時候,我們訪問的是派生類里面的。

派?類和基類中有同名成員,派?類成員將屏蔽基類對同名成員的直接訪問,這種情況叫隱藏。(會把基類里面的成員變量屏蔽掉)(如果在派生類里面想要訪問基類里面的成員的話,我們就要指定我們的類域);

需要注意的是如果是成員函數的隱藏,只需要函數名相同就構成隱藏。(只要是函數的名字一樣,就構成隱藏,返回值和函數參數全都不看)。(在派生類里面把基類的函數隱藏了,如果派生類的對象想要使用基類里面的函數,我們就要指定作用域)

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

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

相關文章

冒泡排序、插入排序、快速排序、堆排序、希爾排序、歸并排序

目錄 冒泡排序插入排序快速排序(未優化版本)快速排序(優化版本)堆排序希爾排序歸并排序各排序時間消耗對比 冒泡排序 冒泡排序核心邏輯就是對數組從第一個位置開始進行遍歷,如果發現該元素比下一個元素大,則交換位置,如果不大,就…

JavaScript:表單及正則表達式驗證

今天我要介紹的是在JavaScript中關于表單驗證內容的知識點介紹&#xff1a; 關于表單驗證&#xff0c;我接下來則直接將內容以及效果顯示出來并作注解&#xff0c;這樣可以清晰看見這個表達驗證的妙用&#xff1a; <form id"ff" action"https://www.baidu.…

天元證券|調倉曝光!首批科技基金一季報出爐

4月15日&#xff0c;中歐基金、永贏基金、長城基金等公募基金公司旗下部分權益類基金產品一季報出爐。 券商中國記者梳理發現&#xff0c;永贏信息產業智選混合主要聚焦信息技術領域布局&#xff0c;前十大重倉股中9只股票屬于信息技術行業&#xff0c;合計占基金資產凈值比例達…

SpringAI版本更新:向量數據庫不可用的解決方案!

Spring AI 前兩天&#xff08;4.10 日&#xff09;更新了 1.0.0-M7 版本后&#xff0c;原來的 SimpleVectorStore 內存級別的向量數據庫就不能用了&#xff0c;Spring AI 將其全部源碼刪除了。 此時我們就需要一種成本更低的解決方案來解決這個問題&#xff0c;如何解決呢&…

Sklearn入門之datasets的基本用法

、 Sklearn全稱:Scipy-toolkit Learn是 一個基于scipy實現的的開源機器學習庫。它提供了大量的算法和工具&#xff0c;用于數據挖掘和數據分析&#xff0c;包括分類、回歸、聚類等多種任務。本文我將帶你了解并入門Sklearn下的datasets在機器學習中的基本用法。 獲取方式 pi…

優化 Dockerfile 性能之實踐(Practice of Optimizing Dockerfile Performance)

優化 Dockerfile 性能之實踐 構建 Docker 鏡像時&#xff0c;Dockerfile 的性能會顯著影響構建過程的效率。經過優化的 Dockerfile 可以縮短構建時間、最小化鏡像大小并提高整體容器性能。在本文中&#xff0c;我們將探討優化 Dockerfile 性能的最佳實踐。 盡量減少層數 影響…

出現 ERR_CERT_COMMON_NAME_INVALID | 301 302 重定向的解決方法

目錄 前言1. 問題所示2. 原理分析3. 解決方法前言 ?? 找工作,來萬碼優才:?? #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器,無代碼爬取,就來:bright.cn 1. 問題所示 執行代碼時,出現如下提示: GET https://xxxx/admin-api/system

C語言 —— 指尖躍遷 刻印永恒 - 文件操作

目錄 1. 什么是文件 1.1 程序文件 1.2 數據文件 1.3 文件名 2. 二進制文件和文本文件 3. 文件的打開與關閉 3.1 流和標準流 3.2 文件指針 3.3 文件的打開與關閉 fopen fclose 4. 文件的順序讀寫 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…

用css給div列表加個序號

用 CSS 的 counter 相關屬性來為列表添加序號。以下是具體的代碼&#xff0c;我將以 HTML 文件的形式提供&#xff0c;并且會運行展示效果&#xff1a; .as-div {// counter-reset: my-counter; /* 計數器名稱是my-counter */// counter-reset: small-apple; /* 計數器名稱是s…

Rust : 關于*const () 與type erase

*const () 可以替代泛型&#xff0c;更加靈活。 一、 代碼 //use std::mem::transmute; trait Work {fn process(&self); } struct Foo(String);impl Work for Foo {fn process(&self) {println!("process work from Foo : {}", self.0);} } struct Bar(S…

【專題刷題】雙指針(二)

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

吉爾吉斯斯坦工商會代表團赴齊河德瑞新能源汽車考察

德州齊河&#xff0c;2025年4月15日電 時中美貿易突變之際&#xff0c;乘國家一帶一路之風。 展中國新能源之宏圖&#xff0c;塑國貿體系之新方向。 今日上午&#xff0c;吉爾吉斯斯坦共和國工商會代表團一行三人受邀抵達濟南&#xff0c;開啟對德瑞新能源科技有限公司&…

【記錄condapack打包環境到超算上順利運行】

以安裝CLRNet為例子 本地Linux系統上的操作步驟。 由于官方的安裝包的步驟&#xff0c;執行condapack的時候會報錯&#xff0c;所以使用以下步驟進行安裝包。 安裝其他 Python 依賴包 pip install -r requirements.txt? 二、構建并打包項目&#xff08;核心步驟&#xff…

Windows OpenUtau-v0.1.529-開源歌曲合成軟件[提供MIDI編輯、歌詞調整、音色修改 等功能,音樂創作者的必備工具]

Windows OpenUtau 鏈接&#xff1a;https://pan.xunlei.com/s/VONy_Refvo6_813Ig--nu5_rA1?pwdejzc# 引擎&#xff08;Resampler&#xff09;和拼接器&#xff08;Wavtool&#xff09;是UTAU協議中音頻處理的兩大組件。前端編輯器通過調用引擎和拼接器&#xff0c;對音頻進行…

虛擬卡可以解決訂閱 ChatGPT 時無法付款的問題

在全球掀起 AI 熱潮的今天&#xff0c;因為工作的需要有些朋友要用ChatGPT&#xff0c;它也成為了不少人日常學習、工作、創作和編程的得力助手。然而&#xff0c;不少用戶在嘗試訂閱 ChatGPT Plus&#xff08;付費版&#xff09;時&#xff0c;卻遇到了一個令人頭疼的問題——…

設計模式之狀態模式:優雅管理對象行為變化

引言 狀態模式&#xff08;State Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許對象在其內部狀態改變時改變它的行為&#xff0c;使對象看起來似乎修改了它的類。狀態模式將狀態轉移邏輯和狀態相關行為封裝在獨立的狀態類中&#xff0c;完美解決了復雜條件判斷問…

【算法】歸并排序

算法系列七&#xff1a;歸并排序 一、歸并排序的遞歸探尋 1.思路 2.搭建 2.1設計過掉不符情況&#xff08;在最底層時&#xff09; 2.2查驗能實現基礎排序&#xff08;在最底層往上點時&#xff09; 2.3跳轉結果繼續往上回搭 3.實質 4.實現 二、遞歸的調用棧 1.遞歸的…

線束線纜從二維設計到虛擬驗證全流程解決方案

一、傳統設計中的痛點 線纜的開發設計是橫跨多專業多學科的龐大工程&#xff0c;通常會劃分為幾大階段逐次推進&#xff0c;由于每個階段的工作任務不同&#xff0c;所以在不同設計階段使用的工具也完全不同&#xff0c;由此導致整個設計流程中工程師常常要跨平臺協作&#xf…

【智駕中的大模型 -1】自動駕駛場景中的大模型

1. 前言 我們知道&#xff0c;大模型現在很火爆&#xff0c;尤其是 deepseek 風靡全球后&#xff0c;大模型毫無疑問成為為中國新質生產力的代表。百度創始人李彥宏也說&#xff1a;“2025 年可能會成為 AI 智能體爆發的元年”。 隨著科技的飛速發展&#xff0c;大模型的影響…

個人博客系統后端 - 注冊登錄功能實現指南

一、功能概述 個人博客系統的注冊登錄功能包括&#xff1a; 用戶注冊&#xff1a;新用戶可以通過提供用戶名、密碼、郵箱等信息創建賬號用戶登錄&#xff1a;已注冊用戶可以通過用戶名和密碼進行身份驗證&#xff0c;獲取JWT令牌身份驗證&#xff1a;使用JWT令牌訪問需要認證…