C++:53---菱形繼承、虛繼承

一、菱形繼承

  • 在介紹虛繼承之前介紹一下菱形繼承

  • 概念:A作為基類,B和C都繼承與A。最后一個類D又繼承于B和C,這樣形式的繼承稱為菱形繼承

  • 菱形繼承的缺點:

    • 數據冗余:在D中會保存兩份A的內容

    • 訪問不明確(二義性):因為D不知道是以B為中介去訪問A還是以C為中介去訪問A,因此在訪問某些成員的時候會發生二義性

  • 缺點的解決:

    • 數據冗余:通過下面“虛繼承”技術來解決(見下)

    • 訪問不明確(二義性):通過作用域訪問符::來明確調用。虛繼承也可以解決這個問題

演示案例

class A{public:A(int a) :m_a(a) {}int getMa() { return m_a; }private:int m_a;};class B :public A{public

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

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

相關文章

C++:49---繼承中的友元

一、友元在繼承中的關系我們在友元的文章中介紹過,友元關系不能繼承。(1)友元關系不存在傳遞性,即每個類負責控制自己的友元類或者友元函數;(2)友元關系是單向的,不具有交換性。若類…

leetcode383. 贖金信

給定一個贖金信 (ransom) 字符串和一個雜志(magazine)字符串,判斷第一個字符串ransom能不能由第二個字符串magazines里面的字符構成。如果可以構成,返回 true ;否則返回 false。 (題目說明:為了不暴露贖金信字跡,要從…

C++:52---多重繼承

一、多重繼承概念 多重繼承是指:從多個直接基類而產生派生類的能力例如:class ZooAnimal {}; //動物class Endangered {}; //瀕臨滅絕的動物class Bear :public ZooAnimal {}; //熊 //多重繼承 class Panda :public Bear, public Endangered {}; //熊貓二、多重繼承的語法 繼…

關于jsp頁面顯示的時間格式和Oracle數據庫中的格式不一樣的問題

今天我遇到一個問題:就是數據庫存的時間格式是:2013-06-28 11-00-17 ,但是通過查詢在jsp頁面上顯示出來是:2013-06-28 11-00-17.0 就是多了一個.0,之后通過查資料解決了這個問題,現在寫出來和大家分享一下…

C++:50---虛析構函數

一、引入 如果通過一個基類指針申請一個派生類對象,那么在通過這個指針釋放對象的時候,要求基類的虛函數是virtual的 。二、虛析構函數 使用方法和規則與虛函數一樣格式要求:虛析構函數要求基類與派生類中的名稱不一致只要基類的析構函數是虛函數,就能確保我們在釋放指針時…

C++:51---繼承中的構造函數、析構函數、拷貝控制一系列規則

一、繼承中的構造函數 根據構造函數的執行流程我們知道:派生類定義時,先執行基類的構造函數,再執行派生類的構造函數拷貝構造函數與上面是相同的原理二、繼承中的析構函數 根據析構函數的執行流程我們知道:派生類釋放時,先執行派生類的析構函數,再執行基類的析構函數二、…

leetcode434. 字符串中的單詞數

統計字符串中的單詞個數,這里的單詞指的是連續的不是空格的字符。 請注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 輸入: "Hello, my name is John" 輸出: 5 思路:本位是字母,前面是空格(或…

Redis:15---鍵遷移(move、dump、restore、migrate)

鍵遷移概述:鍵遷移就是把數據由一個Redis遷移到另一個Redis(例如從生產環境遷移到測試環境),或者在數據庫之間進行遷移鍵遷移有三種方式:move、dumprestore、migrate下面是三種方式的比較,建議使用migrate&…

Redis:18---常用功能之(Lua腳本)

為了保證多條命令組合的原子性,Redis提供了簡單的事務功能以及集成Lua腳本來解決這個問題,本文介紹Lua,事務已經在前一篇文章介紹過了一、Lua概述 Lua語言是在1993年由巴西一個大學研究小組發明,其設計目標是作為嵌入式程序移植到其他應用程序,它是由C語言實現的,雖然簡單…

leetcode414. 第三大的數

給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間復雜度必須是O(n)。 示例 1: 輸入: [3, 2, 1] 輸出: 1 解釋: 第三大的數是 1. 示例 2: 輸入: [1, 2] 輸出: 2 解釋: 第三大的數不存在, 所以返回最大的數…

Redis:17---常用功能之(事務)

為了保證多條命令組合的原子性,Redis提供了簡單的事務功能以及集成Lua腳本來解決這個問題,本文介紹Redis事務,Lua在下一篇文章介紹一、事務概述簡單地說,事務表示一組動作,要么全部執行,要么全部不執行。例…

leetcode448. 找到所有數組中消失的數字 天秀記錄法

給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另一些只出現一次。 找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。 您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回…

Redis:12---有序集合對象

一、有序集合對象概述它保留了集合不能有重復成員的特性, 但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下標作為排序依據不同的是,它給每個元素設置一個分數(score)作為排序的依據如下圖所示&#xff0…

Redis:14---常用功能之(Pipeline)

一、Pipeline概述 Redis客戶端執行一條命令分為如下四個過程:1.發送命令2.命令排隊3.命令執行4.返回結果其中1+4稱為Round Trip Time(RTT,往返時間)Pipeline概述 Redis提供了批量操作命令(例如mget、mset等),有效地節約RTT。但大部分命令是不支持批量操作的,例如要執行…

leetcode170. 兩數之和 III - 數據結構設計

設計并實現一個 TwoSum 的類,使該類需要支持 add 和 find 的操作。 add 操作 - 對內部數據結構增加一個數。 find 操作 - 尋找內部數據結構中是否存在一對整數,使得兩數之和與給定的數相等。 示例 1: add(1); add(3); add(5); find(4) -> true fi…

Redis:11---Set對象

集合類型 (Set) 是一個無序并唯一的鍵值集合。它的存儲順序不會按照插入的先后順序進行存儲。 集合類型和列表類型的區別如下: 列表可以存儲重復元素,集合只能存儲非重復元素;列表是按照元素的先后順序存儲元素的,而集合則是無序方式存儲元素的。一、集合對象概述 特點:集…

Oracle中計算兩個時間的時間差:

計算時間差是oracledata數據類型的一個常見問題。oracle支持日期計算,你可以創建諸如“日期1-日期2”這樣的表達式來計算這兩個日期之間的時間差。一旦你發現了時間差異,你可以使用簡單的技巧來以天、小時、分鐘或者秒為單位來計算時間差。為…

Redis:13--常用功能之redis-cli redis-server等命令

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們 雖然比較簡單,但是麻雀雖小五臟俱全,有時可以很巧妙地解決一些問題一、redis-cli在前面數據庫連接的時候已經redis-cli的-h、-p參數,除了這些參數,還有很多…

Redis:16---常用功能之(慢查詢日志)

一、慢查詢日志介紹 許多存儲系統(例如MySQL)提供慢查詢日志幫助開發和運維人員定位系統存在的慢操作。所謂慢查詢日志就是系統在命令執行前后計算每條命令的執行時間,當超過預設閥值,就將這條命令的相關信息記錄下來,Redis也提供了類似的功能Redis的慢查詢日志功能用于記…

leetcode256. 粉刷房子

假如有一排房子,共 n 個,每個房子可以被粉刷成紅色、藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子并且使其相鄰的兩個房子顏色不能相同。 當然,因為市場上不同顏色油漆的價格不同,所以房子粉刷成不同顏色的花…