繼承相關知識

概念

定義類時,代碼中有共性的成員,還有自己的屬性,使用繼承可以減少重復的代碼,

繼承的語法

class 子類:繼承方式 父類

繼承方式有:public,private,protected

公共繼承:父類的公有成員到子類也是公有的,父類的保護成員在子類是受保護的

保護繼承:父類中共有的權限內容和保護權限內容,在子類都變為保護權限

私有繼承:父類中公有和保護權限內容,在子類都變為私有權限

其中,父類的私有成員,子類不管哪種繼承方式都無法訪問。

繼承中的對象模型

父類中所有的非靜態成員屬性,子類都會繼承,私有成員也會繼承,只是私有成員被編譯器隱藏了。

繼承中構造和析構順序

#include <iostream>
using namespace std;
class Base
{
public:Base(){cout << "父類構造函數" << endl;}~Base(){cout << "父類析構函數" << endl;}
};
class son :public Base
{
public:son(){cout << "子類構造函數" << endl;}~son(){cout << "子類析構函數" << endl;}
};
int main()
{son s;
}

繼承中的構造順序是,先構造父類,再構造子類,析構則相反,因為創建子類對象的時候,會先創建父類對象,然后繼承。

繼承同名成員的處理方式

當子類和父類出現同名的成員時,如果需要訪問子類,可以直接訪問,如果需要訪問父類,需要加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}~son(){}
};
int main()
{son s;cout << s.m_a << endl;//20cout << s.Base::m_a << endl;//10
}

繼承中同名成員函數的處理方式

思想和同名成員函數處理方式相同,但需要注意的是,子類的同名函數會隱藏父類中所有的同名函數,解決方法就是加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}void func(){cout << "父類函數的調用" << endl;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}void func(){cout << "子類函數的調用" << endl;}~son(){}
};
int main()
{son s;s.func();//直接調用是子類的函數s.Base::func();//加作用域后就是調用父類的函數
}

繼承中同名靜態成員的處理方式

靜態成員變量的特點是:所有對象共享同一份數據,編譯階段就分配內存,類內聲明,類外初始化。

靜態成員定義的語法:

static int a;

靜態成員函數的特點是:只能訪問靜態成員變量,不能訪問非靜態成員變量,也是只有一份,所有對象共享一份函數實例。

靜態成員和非靜態成員出現同名時,處理方式一致,訪問子類直接訪問,訪問父類需要加上作用域,因為靜態成員不屬于對象上,因此也可以通過類名直接訪問,靜態成員屬性。

靜態成員函數處理方式一致,也可以通過類名方式訪問,子類也會隱藏父類同名函數,需要訪問被隱藏的父類同名函數,需要加上作用域。

靜態成員和非靜態成員處理方式是一樣的,只是靜態成員可以通過對象和類名訪問。

多繼承

語法:

class 子類:繼承方式 父類1,繼承方式 父類2......

子類中如果有多個同名成員,需要加作用域區分。(實際開發中很少使用)

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

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

相關文章

【Python進階】數據可視化:Matplotlib從入門到實戰

Python數據可視化&#xff1a;Matplotlib完全指南 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;折線圖&#xff08;股票趨勢&#…

Java高效合并Excel報表實戰:GcExcel讓數據處理更簡單

前言&#xff1a;為什么需要自動化合并Excel&#xff1f; 在日常辦公場景中&#xff0c;Excel報表合并是數據分析的基礎操作。根據2023年企業辦公效率報告顯示&#xff1a; 財務人員平均每周花費6.2小時在Excel合并操作上人工合并的錯誤率高達15%90%的中大型企業已采用自動化…

Python 列表與元組深度解析:從基礎概念到函數實現全攻略

在 Python 編程的廣袤天地中&#xff0c;列表&#xff08;List&#xff09;和元組&#xff08;Tuple&#xff09;是兩種不可或缺的數據結構。它們如同程序員手中的瑞士軍刀&#xff0c;能高效地處理各類數據。從簡單的數值存儲到復雜的數據組織&#xff0c;列表和元組都發揮著關…

Java中的方法重寫(Override)與方法重載(Overload)詳解

一、基本概念對比 特性方法重寫(Override)方法重載(Overload)定義子類重新定義父類中已有的方法同一個類中多個同名方法&#xff0c;參數不同作用范圍繼承關系中&#xff08;父子類之間&#xff09;同一個類內方法簽名必須相同&#xff08;方法名參數列表&#xff09;必須不同…

發布一個npm包,更新包,刪除包

發布一個npm包&#xff0c;更新包&#xff0c;刪除包 如何將自己的項目 發布為一個 npm 包&#xff0c;并掌握 更新 和 刪除 的操作流程。 &#x1f680; 一、發布一個 npm 包的完整流程 ? 1. 注冊并登錄 npm 賬號 如果還沒有賬號&#xff0c;先注冊&#xff1a; 官網注冊&…

Linux系統之----進程的概念

1.進程 1.1基本概念 課本概念 &#xff1a;進程是程序的一個執行實例&#xff0c;是正在執行的程序。當程序被執行時&#xff0c;系統會為其創建一個進程&#xff0c;包含程序代碼、數據以及運行時所需的資源。 內核觀點 &#xff1a;進程是擔當分配系統資源&#xff08;CPU…

Shell腳本中的字符串截取和規則變化

文章目錄 前言if通配符判斷if判斷多個條件規則變化字符串的兩個示例改變中間段數字改變末尾段數字 總結 前言 科技的發展會帶來習慣的改變&#xff0c;特別是對于我們這批敲代碼的&#xff0c;之前還積累一些奇巧淫技&#xff0c;想著在必要的時候賣弄一下&#xff0c;自從生成…

c語言修煉秘籍 - - 禁(進)忌(階)秘(技)術(巧)【第七式】程序的編譯

c語言修煉秘籍 - - 禁(進)忌(階)秘(技)術(巧)【第七式】程序的編譯 【心法】 【第零章】c語言概述 【第一章】分支與循環語句 【第二章】函數 【第三章】數組 【第四章】操作符 【第五章】指針 【第六章】結構體 【第七章】const與c語言中一些錯誤代碼 【禁忌秘術】 【第一式】…

Feign 深度解析:Java 聲明式 HTTP 客戶端的終極指南

Feign 深度解析&#xff1a;Java 聲明式 HTTP 客戶端的終極指南 Feign 是由 Netflix 開源的 ?聲明式 HTTP 客戶端&#xff0c;后成為 Spring Cloud 生態的核心組件&#xff08;現由 OpenFeign 維護&#xff09;。它通過注解和接口定義簡化了服務間 RESTful 通信&#xff0c;并…

如何Ubuntu 22.04.5 LTS 64 位 操作系統部署運行SLAM3! 詳細流程

以下是在本地部署運行 ORB-SLAM3 的詳細步驟&#xff0c;基于官方 README.md 和最佳實踐整理&#xff0c;適用于 Ubuntu 16.04/18.04/20.04/22.04 系統&#xff1a; 一、系統要求與依賴項安裝 1. 基礎系統要求 操作系統&#xff1a;Ubuntu 16.04/18.04/20.04/22.04&#xff…

USB 共享神器 VirtualHere 局域網內遠程使用打印機與掃描儀

本文首發于只抄博客,歡迎點擊原文鏈接了解更多內容。 前言 很久之前,有分享過使用 CUPS 和路由器來實現局域網內共享打印機,但由于 SANE 支持的打印機較少以及掃描驅動的缺失,試了很多種方法都沒有辦法成功遠程使用打印機的掃描功能。 后面偶然發現 VirtualHere 可以曲線…

一洽智能硬件行業解決方案探索與實踐

一、智能硬件行業發展現狀剖析 在數字化浪潮推動下&#xff0c;智能硬件行業呈現蓬勃發展態勢。軟硬件一體化的深度融合&#xff0c;構建起智能化服務的核心架構&#xff0c;而移動應用作為連接用戶與設備的重要橋梁&#xff0c;其作用愈發關鍵。深入研究該行業&#xff0c;可…

【C++ 類和數據抽象】構造函數

目錄 一、構造函數的基本概念 1.1 構造函數核心特性 1.2 構造函數的作用 1.3 構造函數類型體系 二、構造函數的類型 2.1 默認構造函數 2.2 帶參數的構造函數 2.3 拷貝構造函數 2.4 移動構造函數&#xff08;C11 及以后&#xff09; 三、初始化關鍵技術 3.1 成員初始…

圖數據庫nebula測試指南

概述 Nebula是一個開源的分布式圖數據庫系統&#xff0c;專為處理超大規模關聯數據而設計。可以將復雜的關聯關系存在nebula圖數據庫中&#xff0c;提供可視化平臺用于案件關聯查詢及調查。測試的前提是了解nebula圖數據庫&#xff0c;會使用基本的插入語句和查詢語句&#xf…

dispaly: inline-flex 和 display: flex 的區別

display: inline-flex 和 display: flex 都是 CSS 中用于創建彈性盒子布局&#xff08;Flexbox&#xff09;的屬性值&#xff0c;但它們之間有一些關鍵的區別&#xff0c;主要體現在元素如何在頁面上被渲染和它們對周圍元素的影響。 主要區別 1&#xff0c;塊級 vs 行內塊級 d…

Sqlserver安全篇之_Sqlcmd命令使用windows域賬號認證sqlserver遇到問題如何處理的案例

sqlcmd https://learn.microsoft.com/zh-cn/sql/tools/sqlcmd/sqlcmd-connect-database-engine?viewsql-server-ver16 sqlcmd -S指定的數據庫連接字符串必須有對應的有效的SPN信息&#xff0c;否則會報錯SSPI Provider: Server not found in Kerberos database. 正常連接 1、…

電腦硬盤常見的幾種接口類型

一、傳統接口&#xff08;機械硬盤為主&#xff09; 1. SATA 接口&#xff08;Serial ATA&#xff09; 特點&#xff1a; 最主流的機械硬盤&#xff08;HDD&#xff09;接口&#xff0c;廣泛用于臺式機和筆記本電腦。傳輸速度較慢&#xff0c;理論最大帶寬為 6 Gbps&#xff…

【前端HTML生成二維碼——MQ】

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 前端HTML生成二維碼——MQ 前言本文將介紹前端HTML如何更具用戶輸入的內容生成對應的二維碼,附頁面代碼、實現函數、js腳本。一、自定義顯示頁面1、效果圖二、使用步驟1、引入庫2、實現函數3、頁面及函數代…

研發效率破局之道閱讀總結(3)工程優化

研發效率破局之道閱讀總結(3)工程優化 Author: Once Day Date: 2025年4月22日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文章可參考專欄: 程序的藝術_Once-Day…

C# MP3 伴奏

使用建議&#xff1a; 參數調節指南&#xff1a; 低頻人聲殘留&#xff1a;降低CenterFrequency(800-1500Hz) 高頻人聲殘留&#xff1a;提高CenterFrequency(2500-3500Hz) 消除力度不足&#xff1a;提高EliminationStrength(0.9-1.0) 伴奏失真&#xff1a;降低EliminationSt…