1. 程式人生 > >C++-繼承:基類與派生類的關係

C++-繼承:基類與派生類的關係

成員函式的重定義和名字隱藏

基類的資料成員和成員函式在派生類中都有一份拷貝,派生類能夠直接訪問從基類繼承而來的public和protected成員,且只能夠通過這兩類成員訪問從基類繼承而來的private成員。

派生類不僅可以新增基類沒有的新成員,而且可以對基類的成員函式進行重定義或過載。重定義是指派生類可以定義與基類具有相同函式原型的成員函式(相同的返回型別、函式名、引數表),而過載則要求成員函式具有不同的函式原型。

需要指出的是,派生類對基類成員函式的重定義或過載會影響基類成員函式在派生類中的可見性,基類的同名成員函式會被派生類過載的同名函式所隱藏。

一般認為派生類與基類同名成員函式之間是一種重定義而非過載關係:
1、過載不會隱藏同名的其他成員函式;
2、過載是指相同作用域中的同名函式,而派生類與基類個自定義了一個唯一的作用域,二者是獨立的。

基類成員訪問

一個派生類物件時實際上由兩部分構成:基類子物件和派生子物件。
派生類對基類成員的訪問有以下幾種方式:
1、通過派生類物件直接訪問基類成員。public繼承中,基類的public在派生類中也是public,可以被派生類物件的外部函式直接訪問。

2、在派生類成員函式中直接訪問基類成員,三中繼承方式中基類的public和protected成員都可以被派生類的成員函式直接訪問。

3、通過基類名字限定訪問被過載的基類成員名。在派生類中被過載或重定義的基類成員,只有通過基類的類名限定才能訪問。

相關推薦

C++-繼承派生關係

成員函式的重定義和名字隱藏 基類的資料成員和成員函式在派生類中都有一份拷貝,派生類能夠直接訪問從基類繼承而來的public和protected成員,且只能夠通過這兩類成員訪問從基類繼承而來的private成員。 派生類不僅可以新增基類沒有的新成員,而且可以對

詳解C++中派生的轉換以及虛

原文來源:https://www.jb51.net/article/72586.htm# C++基類與派生類的轉換 在公用繼承、私有繼承和保護繼承中,只有公用繼承能較好地保留基類的特徵,它保留了除建構函式和解構函式以外的基類所有成員,基類的公用或保護成員的訪問許可權在派生類中全部都按原樣保留下來

關於派生相關,以及繼承

多型就是一個基類可以指向其任意派生類的能力,即基類的指標或者引用可以指其派生類,作用就就是希望使用派生具體的實現介面功能 1.多型性只存在類的繼承層次中 2.必須使用基類的指標或者引用才有效. 3.多型可以動態呼叫的函式必須是由virtual宣告的函式 4.多型性是執行時的動態載入,不是連結時也不是

C++繼承詳解之二——派生成員函式詳解(函式隱藏、建構函式相容覆蓋規則)

  在這一篇文章開始之前,我先解決一個問題。   在上一篇C++繼承詳解之一——初探繼承中,我提到了在派生類中可以定義一個與基類成員函式同名的函式,這樣派生類中的函式就會覆蓋掉基類的成員函式。   在譚浩強的C++程式設計這本書第十一章,351頁最下面有這麼

C++中的派生

派生類的繼承方式總結: 繼承方式 說明 public 基類的public和protected的成員被派生類繼承後,保持原來的狀態 private 基類的public和protected的成員被派生類繼承後,變成派生類的private成員 protected

派生的指針和成員函數調用原理

而且 font 重新定義 -s 繼承 轉型 center span enter 基類與派生類的指針和成員函數調用原理 1.如果以一個基礎類指針指向一個衍生類對象(派生類對象),那麽經由該指針只能訪問基礎類定義的函數(靜態聯翩) 2.如果以一個衍生類指針指向一個基礎類對象,必

派生,父指針指向子對象

namespace 簡單工廠模式 為什麽 對象創建 簡單工廠 pos 釋放 自己的 分享 先看一段代碼: 1 #include<iostream> 2 3 using namespace std; 4 5 class Base{ 6 publi

C++派生的構造函數和析構函數的調用

str 生命 ons stream all 兩種 col 生命期 析構函數 C++基類和派生類的構造函數和析構函數的調用 1.調用順序   當創建一個派生類的對象時,系統首先自動創建一個基類對象,也就是說,在調用派生類構造函數創建派生類對象之前,系統首先調用基類的構造函數創

C++ 學習筆記 (六) 繼承- 子有同名函數,變量

pan end main函數 類繼承 class 分享圖片 共享 code 訪問   學習了類的繼承,今天說一下當父類與子類中有同名函數和變量時那麽程序將怎麽執行。首先明確當基類和子類有同名函數或者變量時,子類依然從父類繼承。   舉例說明:         例

C++Primer_Chap15_面向物件程式設計_List02_定義派生_筆記

class Quote{ public: Quote() = default; Quote(const std::string &book, double sales_price): bookNo(book), price(sales_price){} std::str

C#中要自己手動在派生的建構函式中逐一的初始化的欄位嗎

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[

C#派生_161103

C#不支援私有繼承 派生類應當那個被看做是基類所具有的特性和功能的繼承和擴充套件,而不是簡單的派生類大於基類派生類不能選擇性的繼承基類的方法和屬性,必須繼承基類的所有特性和方法派生類可以在繼承基類的基

談談的this指標(C++)

引入   定義一個類的物件,首先系統已經給這個物件分配了空間,然後會呼叫建構函式(說明:假設存在建構函式)。一個類有多個物件,當程式中呼叫物件的某個函式時,有可能要訪問到這個物件的成員變數。而對於同一個類的每一個物件,都是共享同一份類函式。物件有單獨的變數,但是沒有單獨的函

C++模板派生中訪問成員必須顯式呼叫(作用域限定)

一個常見的派生類訪問基類成員變數的例子:template<int dim>class A{public:A():b(2){}int b;};template<int dim>class B:public A<dim>{public:   

C++】拷貝建構函式的呼叫順序

先看一段程式碼: #include <iostream> using namespace std; class Base { public:     Base()     {         cout<<"Base()\n";         m_a

《Java從入門到失業》第五章繼承多型(5.8-5.10)多型Object

5.8多型      上面我們瞭解了向上轉型,即一個物件變數可以引用本類及子類的物件例項,這種現象稱為多型(polymorphism)。多型究竟有什麼用呢?我們先學習一個知識點。 5.8.1方法重寫       

protected 成員派生

span clas con count pos 函數 沒有 disco virt 受保護的成員對於類的用戶來說時不可訪問的 受保護的成員對於派生類的成員和友元來說是可訪問的 其中,只能通過派生類對象來訪問基類的受保護成員,派生類對於一個基類對象中的受保護成員沒有任何

OOP1(定義派生)

isbn 類的構造函數 不能 turn title item 內存 derived 構造 面向對象程序設計基於三個基本概念:數據抽象,繼承和動態綁定 數據抽象是一種依賴於接口和實現分離的編程技術。繼承和動態綁定對程序的編號有兩方面的影響:一是我們可以更容易地定義與其它類相似

經典新式繼承順序

wan search private int super study pytho alice 深度 1 #經典類與新式類的繼承順序 2 3 class Teacher(object): 4 cn=‘Harvard‘ 5 def __init__

(轉) C#解惑HashSet<T>

detail lan http 求交集 方式 tail collect 內部 方法 HashSet<T>是一個相對“冷門”的類型,平時在項目中用得不多,但是在特定的業務中可以大用。 先來了解下HashSet<T>類,主要被設計用來存儲集合,做高