c++ 多型問題詳解
一、多型問題的產生
class
parent
public:
parent(inta=0)
this->a =a;
void
print()
coutprotected:<< "父類a:"
<< a
<
;
private:
intclassa;
child :public
parent
public:
child(intb = 0)
this->b =b;
void
print()
coutprotected:<< "子類b:"
<< b
<< endl
;
private:
intvoidb;
main
()
parent我們本來想根據實際的物件型別來判斷重寫函式的呼叫:p1;p1.print();//輸出父類a:0;
child
c1(100);
c1.print();// 輸出子類b:100;
// 申請乙個父類指標;
parent* base = null
;// 父類指標指向父類物件;
base = &p1;
base->print();//輸出父類a:0;
// 父類指標指向子類物件;
base = &c1;
base->print();//輸出父類a:0; 這不是我們想看到的。
(1)如果父類指標指向的是父類物件則呼叫父類中定義的函式;
(2)如果父類指標指向的是子類物件則呼叫子類中定義的重寫函式。
但是實際情況c++編譯器不支援這樣做,c++編譯器提供了最保險的辦法就是全部呼叫父類函式。但這不是我們想要的,因此c++編譯器提供了一種多型的機制,實現了這種動態呼叫的功能。
二、c++多型
其實很簡單,只要在父類函式前面加上
virtual
關鍵字,告訴
c++編譯器此函式要根據實際物件動態呼叫。
<< "父類a:"
<< a
<< endl
;
protected:private:
intclassa;
child :public
parent
public:
child(intb = 0)
this->b =b;
void
print()
coutprotected:<< "子類b:"
<< b
<< endl
;
private:
intvoidb;
main
()
parent總結:c++多型成立的三個條件p1;p1.print();//輸出父類a:0;
child
c1(100);
c1.print();// 輸出子類b:100;
// 申請乙個父類指標;
parent* base = null
;// 父類指標指向父類物件;
base = &p1;
base->print();//輸出父類a:0;
// 父類指標指向子類物件;
base = &c1;
base->print();// 輸出子類b:100;
1、 要有繼承
2 、要有函式重寫(虛)
3、父類指標(父類引用)指向子類物件
C 多型詳解
c 程式語言是一款應用廣泛,支援多種程式設計的計算機程式語言。下面詳細介紹其中c 多型性的一些基本知識,以方便大家在學習過程中對此能夠有乙個充分的掌握。多型性可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。多型 polymorphisn 字面意...
C 多型詳解
多型是物件導向的程式設計的關鍵技術。多型 呼叫同乙個函式名,可以根據需要但實現不同的功能。多型體現在兩個方面,我們以前學過的編譯時的多型性 函式過載 和現在我們這一章將要學習的執行時的多型性 虛函式 執行時多型 執行時的多型性是指在程式執行之前,根據函式名和引數無法確定應該呼叫哪乙個函式,必須在程式...
C 多型詳解
前幾天在網上看到這樣的乙個問題 多型現在一般的用法,就是拿乙個父類的指標去呼叫子類中被重寫的方法。但我搞不懂為什麼要那麼做,我們直接在子類中寫乙個同名的成員函式,從而隱藏父類的函式不就行了麼?然後有人這樣回答 將父模擬喻為電腦的外設介面,子模擬喻為外設,現在我有行動硬碟 u盤以及 它們3個都是可以作...