C 多型問題詳解

2021-08-02 10:04:25 字數 2583 閱讀 6426

c++ 多型問題詳解

一、多型問題的產生

class

parent

public:

parent(int

a=0)

this->a =a;

void

print()

cout

<< "父類a:"

<< a

<

;

protected:

private:

int

a;

class

child :public

parent

public:

child(int

b = 0)

this->b =b;

void

print()

cout

<< "子類b:"

<< b

<< endl

;

protected:

private:

int

b;

void

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:

int

a;

class

child :public

parent

public:

child(int

b = 0)

this->b =b;

void

print()

cout

<< "子類b:"

<< b

<< endl

;

protected:

private:

int

b;

void

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();// 輸出子類b:100;

總結:c++多型成立的三個條件

1、 要有繼承

2 、要有函式重寫(虛)

3、父類指標(父類引用)指向子類物件

C 多型詳解

c 程式語言是一款應用廣泛,支援多種程式設計的計算機程式語言。下面詳細介紹其中c 多型性的一些基本知識,以方便大家在學習過程中對此能夠有乙個充分的掌握。多型性可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。多型 polymorphisn 字面意...

C 多型詳解

多型是物件導向的程式設計的關鍵技術。多型 呼叫同乙個函式名,可以根據需要但實現不同的功能。多型體現在兩個方面,我們以前學過的編譯時的多型性 函式過載 和現在我們這一章將要學習的執行時的多型性 虛函式 執行時多型 執行時的多型性是指在程式執行之前,根據函式名和引數無法確定應該呼叫哪乙個函式,必須在程式...

C 多型詳解

前幾天在網上看到這樣的乙個問題 多型現在一般的用法,就是拿乙個父類的指標去呼叫子類中被重寫的方法。但我搞不懂為什麼要那麼做,我們直接在子類中寫乙個同名的成員函式,從而隱藏父類的函式不就行了麼?然後有人這樣回答 將父模擬喻為電腦的外設介面,子模擬喻為外設,現在我有行動硬碟 u盤以及 它們3個都是可以作...