C/C++—— 對多型現象的理解
多型問題彙總:
C/C++—— C++編譯器是如何實現多型
C/C++—— 在建構函式中呼叫虛擬函式能實現多型嗎(Vptr指標初始化的過程分析)
C/C++—— C++中建構函式不能是虛擬函式的原因分析
C/C++—— C++中定義虛解構函式的原因
C++的三大特性:封裝,繼承和多型。
多型特性分析主要有幾個方面:多型的表現形式,多型實現的條件,多型如何實現,多型的理論基礎。
多型的實現效果
同樣的呼叫語句有多種不同的表現形態;
見下面例子,在下面例子中函式void printObj(Parent * pbase);函式可以通過一個基類指標呼叫子類的函式。
#include <iostream>
using namespace std;
class Parent{
public:
Parent(int a = 0){
this->a = a;
}
virtual void print()
{
cout << "Parent, a = " << a << endl;
}
private:
int a;
};
class Child:public Parent{
public:
Child(int b = 0){
this->b = b;
}
//void print()
virtual void print()//這裡的virtual關鍵字可以要也可以不要,一般為了表明該函式虛擬函式則加上該關鍵字virtual
{
cout << "Child, b = " << b << endl;
}
private:
int b;
};
void printObj(Parent * pbase)
{
pbase->print();
}
int main()
{
Parent p(10);
Child c(11);
printObj(&p);
printObj(&c);
return 0;
}
輸出為:
Parent, a = 10
Child, b = 11
從輸出結果可以看出printObj(&c);傳入的是子類物件,但是函式的形參是父類的指標。但是確實是呼叫的是子類物件的print函式。這種現象就是多型。
多型實現的三個條件
有繼承、有virtual重寫、有父類指標(引用)指向子類物件。
這三個條件,我們可以在上面的例子中可以看到。
如果實現多型
virtual關鍵字,告訴編譯器這個函式要支援多型;不要根據指標型別判斷如何呼叫;而是要根據指標所指向的實際物件型別來判斷如何呼叫。
多型的理論基礎
動態聯編PK靜態聯編。根據實際的物件型別來判斷重寫函式的呼叫。
多型的重要意義
設計模式的基礎。
實現多型的理論基礎
函式指標做函式引數
相關文章
- 剖析C++多型:用C實現簡單多型C++多型
- C++的多型C++多型
- C++ 多型的實現及原理C++多型
- C++多型C++多型
- C++——多型C++多型
- c++實現多型的方法 虛表C++多型
- C/C++—— C++編譯器是如何實現多型C++編譯多型
- 深入理解 C++ 中的多型與檔案操作C++多型
- C++多型性C++多型
- Java-對多型的理解Java多型
- 虛擬函式表-C++多型的實現原理函式C++多型
- C++ 多型的實現原理與記憶體模型C++多型記憶體模型
- 理解C++物件導向程式設計[多型性部分] (轉)C++物件程式設計多型
- C++整理16_多型C++多型
- JAVA與C++的多型異同JavaC++多型
- C++和java多型的區別C++Java多型
- 學習C++(一) 我現在理解的C++ (轉)C++
- C++編譯期多型與執行期多型C++編譯多型
- mysql亂碼現象及對字符集的理解MySql
- c++學習(1)--C++封裝、繼承、多型C++封裝繼承多型
- 關於c語言模擬c++的多型C語言C++多型
- 開心檔之C++ 多型C++多型
- C/C++ 二維陣列的理解(多維陣列)C++陣列
- 多型的理解多型
- C++多型之虛擬函式C++多型函式
- [c++] 繼承和多型整理二C++繼承多型
- 徹底理解c++的隱式型別轉換C++型別
- C++(虛擬函式實現多型基本原理)C++函式多型
- C++ 繼承、多型、虛擬函式C++繼承多型函式
- 盲人摸象--我對UML的理解 (轉)
- C#模擬C++模板特化對型別的值的支援C#C++型別
- 【C++】C++的位元組對齊C++
- 【轉載】C++ ,C#資料型別對照C++C#資料型別
- 理解C++ 巨集C++
- 理解C++ staticC++
- 實現多型多對多 幾個注意點多型
- 【C/C++】c++多程式與hiredis的淺使用C++Redis
- 詳解C++中的多型和虛擬函式C++多型函式