1. 程式人生 > >繼承基類派生類,虛擬函式小結

繼承基類派生類,虛擬函式小結

基類TableTennisPlayer  派生類RatedPlayer

1.       基類指標可以在不進行顯示型別轉換的情況下指向派生類物件;基類引用可以在不進行顯示型別轉換的情況下引用派生類物件.

RatedPlayer palyer(1000,”Mallory”,true)  

TableTennisPlayer &rt = palyer;

TableTennisPlayer *pt = palyer;

2.       不可以將基類物件和地址賦給派生類引用和指標

TableTennisPlayer palyer(1000,“Betsy”);

RatedPlayer&rt = palyer;  ///NOT ALLOWED

RatedPlayer*pt = palyer;  ///NOT ALLOWED

3.       如果沒有使用virtual,將根據引用型別或指標型別選擇方法,如果使用了virtual,將根據引用或指標指向的物件來選擇方法.

class Brass

{

private:

       string m_name;

       intm_age;

public:;

    Brass(conststring name,int age):m_name(name),m_age(age){};

       virtual void study(){cout<<"jackis studying C++"

<<endl;}

       voidlove(){cout<<"Brass love"<<endl;}

};

class BrassPluse:publicBrass

{

private:

       string m_company;

public:

       BrassPluse(conststring &name,int age,const string &company):Brass(name,age),m_company(company){};

       virtual void study(){cout<<"jackis studying C++ in Tencent "

<<endl;}

       voidlove(){cout<<"BrassPluse love"<<endl;}

};

void main()

{

       Brass dom("jack",24);

       BrassPluse doc("jack",24,"Tencent");

       Brass & rt =dom;

       Brass & rc =doc;

///定義virtual

       rt.study();

       rc.study();

       ///沒有定義virtual

       rt.love();

       rc.love();

       system("pause");

}

 

相關推薦

繼承派生,虛擬函式小結

基類TableTennisPlayer  派生類RatedPlayer 1.       基類指標可以在不進行顯示型別轉換的情況下指向派生類物件;基類引用可以在不進行顯示型別轉換的情況下引用派生類物件. RatedPlayer palyer(1000,”Mallory”,

派生的建構函式和解構函式和多繼承中的二義性與虛擬函式

解構函式主要作用是對資料成員初始化。 1派生類的建構函式 派生類的建構函式定義的一般形式為: 派生類名::派生類名(基類所需形參,本類成員所需形參):基類1(基類1 引數表),基類2(基類2 引數表),···,基類n(基類n 引數表),物件成員1(物件1 引數表),物件成員2(物件2 引

使用純虛擬函式的一個小細節——派生定義該虛擬函式時宣告語句必須與裡完全一致

純虛擬函式在派生類裡明明補寫出來了定義,但是實際發現是無效的,派生類因沒有定義該純虛擬函式同樣被編譯器視為了抽象類。 原因很有可能是:基類和派生類的虛擬函式必須型別、名字、引數數量、名字、型別、以及函式前後綴的各種其他屬性(比如const等)必須完全一致!否則會被認為不是同

C++ 建構函式帶引數的繼承方式及派生的初始化

在定義類的時候,會遇到基類的建構函式帶引數,而子類子類建構函式不帶引數,這時候如果以程式碼 a 的方式建立派生類則會出錯。 程式碼 a: class A { public: A(int x, int y):i(x),j(y){ }

【c++】深入剖析虛擬繼承與各種繼承關係中派生內成員記憶體分佈情況及虛表的內容

概要 本文講述在VS2012環境下,採用程式碼和圖結合的方法,分析C++程式碼中不同繼承方式的物件模型,以及從彙編角度分析虛擬繼承編譯器生成的虛基類表裡的內容,不涉及虛擬函式。 繼承分類: 1.單繼承 一個子類只有一個直接父類 // 單繼承 工人類 繼承 人類 cl

C++ 繼承靜態變數虛擬函式練習

總時間限制:  1000ms 記憶體限制:  65536kB // 在此處補充你的程式碼 描述 程式碼填空,使得程式能夠自動統計當前各種動物的數量 #include <iostream> using namespace std; void pr

派生 繼承與約束

用法 1、在基類中定義所有的方法,在各個派生類中繼承基類,派生類可以直接呼叫基類中的方法,基類中的方法就是預設配置方法,若項自定義方法可以在派生類中自定義方法。 2、在基類中定義方法,方法中丟擲異常,異常內容為提示必須建立此方法,派生類繼承基類,若派生類中為定義基類中方法則呼叫時丟擲異常,提示派生類必須自

怎樣呼叫的私有虛擬函式(private virtual function)

原理:如果基類包含虛擬函式,則派生類的物件都會有一個虛擬函式表指標,而且這個指標通常都是處於物件的最前面,即物件的地址和虛擬函式表指標的地址是一樣的。 #include <iostream&g

、 純虛擬函式和抽象

虛基類                 在《多繼承》中講過的例子中,由類A,類B1和類B2以及類C組成了類繼承的層次結構。在該結構中,類C的物件將包含兩個類A的子物件。由於類A是派生類C兩條繼承路徑上的一個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中只產生一

派生

ffi 是我 etag plus prot 間接 ron img tco 看了c#的教程,也上網絡上搜索基類與派生類的概念,一直沒有一個很明確的定義.弄得偶一直很迷糊,現在搜索到c++的教程裏倒是有比較明確的說明,特意貼在這裏,幫助自己理解. 繼承機制提供了無限重復利用程序

一道考察的純虛擬函式定義,靜態變數等C++題目

程式原題如下: #pragma  once class mml { private:static unsigned int x; public:mml(){  x++;  }mml(static unsigned int&){  x++; &

Python例項方法, 方法, 靜態方法, 函式 小結

  不想訪問 類內 和 例項內 的變數,用靜態方法   只想訪問類內變數,不想訪問例項變數,用類方法   即要訪問內變數,也想訪問例項變數用例項方法   函式與靜態方法相同,只是靜態方式的作用域定義在類內 例項方

(C/C++學習筆記)4.C++中的虛擬函式表Virtual Table

1 #include <iostream> 2 using namespace std; 3 4 class base 5 { 6 public: 7 virtual void f(){cout<<"base::f()"<<endl;}

C++物件中虛擬函式與多型性的實現

在面向物件程式設計時,有時會遇到這種需求:我們希望同一個方法在基類和派生類中實現不同的功能,即體現出行為上的多型性。一般有兩種方法可以實現這種需求,其一是在派生類中重新定義基類中方法,其二是使用虛擬函式。這裡主要記錄利用虛擬函式實現多型性的方法。 類中虛擬函式的定義方法 虛擬函式

[收集]c++抽象、純虛擬函式以及巧用純虛解構函式實現介面

在Java、C#中有關鍵詞abstract指明抽象函式、抽象類,但是在C++中沒有這個關鍵詞,很顯然,在C++也會需要只需要在基類宣告某函式的情況,而不需要寫具體的實現,那C++中是如何實現這一功能的,答案是純虛擬函式。 含有純虛擬函式的類是抽象類,不能生成物件,只能派生。

一步一步學習C++()之虛擬函式和純虛數

1、該函式必須與基類的虛擬函式有相同的名稱 2、該函式必須與基類的虛擬函式有相同的引數個數和相對應的引數型別 3、該函式必須與基類的虛擬函式有相同的返回值,或滿足型別相容規則的指標,引用型返回值。 4、如果派生類的函式滿足以上三個條件系統就會自動把其定為虛擬函式。這時派生類

[c++]子私有的虛擬函式,多型問題

       執行時也不會報錯。因為函式的訪問許可權應該只在編譯期有,編譯成機器碼就已經沒有訪問許可權控制了。所以最終,應該是可以編譯,也可以執行。這個特點等於為我們提供了一個強制使用子類的程式設計師必須使用基類的指標來呼叫子類實現的函式,而達到多型的目的,因為子類的函式,

c++中的虛擬函式

c++類中引用虛擬函式就是為了實現多型性,對於不同的物件對同一訊息產生不同的行為。基類中的某成員函式被宣告為虛擬函式時,在它的派生類中可以重新定義,但是重新定義過的函式的函式名、返回型別、引數個數、引數型別的順序都必須和基類中的原型完全相同。另外,派生類中定義可以省略關鍵字virtual。因為系統會根據定義的

C++的中的繼承,多型和虛擬函式

首先繼承,多型,虛擬函式,我們先了解一下各位的關係。 繼承是子類繼承父類,完成基礎功能的獲取,當然繼承有三種許可權,public,protect和private,如果不加許可權限定,預設繼承是私有繼承。 許可權表如下: 所以可以看到凡私有成員,子類都不能用,不過有方法能用,這裡不討

C++: 繼承和多型(二)虛擬函式

C++多型 多型的基礎:動態繫結 基類指標(同引用) 指向一系列的派生類物件,通過指標呼叫派生類物件的同名覆蓋方法,指標指向誰,就會呼叫誰的方法 虛擬函式表     虛擬函式的呼叫 在成員函式中呼叫虛擬函式