繼承多型與虛函式及對類的理解

2021-07-24 16:43:46 字數 1563 閱讀 7276

b是a的子類,子類會繼承父類的public方法,子類物件可以呼叫父類的public介面,但是子類和父類函式重名時,父類的方法會被子類覆蓋(隱藏),子類呼叫和父類同名同參函式或者過載父類的函式後不可以直接呼叫父類函式,需要加a::fun()呼叫,父類的protect方法只在繼承中有效,子類可以呼叫父類的protect方法,但是外部無法訪問,所以在非繼承關係中protect與private等同,private方法只能由類內部的方法呼叫,也可以由友元函式和類呼叫,其他物件都不可以訪問類的private資料。

父類物件指向子類時只能呼叫子類從父類繼承到的一部分函式,不可以呼叫子類新增的函式,所以指標向上轉化是安全的,向下轉化有問題,dynamic_cast會返回乙個空指標。多型是指父類物件可以指向並呼叫子類中和父類同名同參函式,通過虛函式來實現,父類中定義的虛函式在子類不定義也是虛函式。虛函式通過虛函式表實現,32位機器的編譯器有虛函式的類會多出4個位元組的虛函式指標,指向虛函式表中的第乙個虛函式,當父類物件指向子類並呼叫虛函式的時候,便從子類的虛函式表中找出對應的同名同參函式。純虛函式是如同virtual fun(){}=0的函式,存在純虛函式的類稱為抽象類(純虛類),抽象類不可以建立例項物件,只能由子類重寫其純虛函式。舉個例子就如動物類virtual eat(){}=0而狗類virtual eat()  

}  在傳引用引數前加const主要是防止不小心修改原有資料,盡量在不會更改原有資料的所有情況下加const限定防止出錯。

對類的構造可以使用成員初值列

class

stu  

void

printstu()  

private

:  string name;  

string ***;  

intage;  

};  

當構造子類的時候,構造順序應該是先父類,然後構造子類裡的物件,然後構造子類自身。若父類或子類中的物件存在自定義的含參建構函式,必須先構造他們才能構造子類。

在繼承關係中,要將父類的析構函式宣告為虛函式,防止父類指標指向子類的時候,無法析構子類而只析構父類。

#include

usingnamespacestd;

classperson

};

classstudent :publicperson

};

intmain()

執行結果:

設計乙個不能繼承的類:

#include

using namespace std;

template <

typename t>

class base

~base()}

;class finalclass : virtual public base

~finalclass()}

;void main(

)

C C 類的繼承 多型與虛函式 過載

物件導向的程式設計主要目的是提供可重複利用的 類的繼承也是 重用的一種方式。從已有的類 基類 派生出新的類,派生類 繼承了原有類的特性,同時在其基礎上進行擴充套件增加功能。1.繼承 派生類可以訪問基類的公有成員 派生類不能直接訪問基類的私有成員,必須通過基類的公有函式間接訪問私有成員 派生類的建構函...

虛方法 重寫 類的繼承與多型

using system namespace vr30lesson11 class people get public string name 只能重寫父類的虛方法 virtual public virtual void play public void eat 男人類 繼承人類 基類 繼承 子類可...

繼承 虛函式與多型學習總結

基礎知識點 類之間的關係 繼承 在已有類的基礎上建立新類的過程乙個b 類繼承a 類,或稱從類 a 派生b類 a 稱為基類 父類 類 b 稱為派生類 子類 基類和派生類 類繼承關係的語法形式 class 派生類名 基類名錶 基類名錶 構成訪問控制 基類名1 訪問控制 基類名2,訪問控制 基類名n 訪問...