1-1多態的概述與虛函數
[TOC]
1.什么是多態?
指相同對象收到不同消息或不同對象收到相同消息時產生不同的動作。
2.多態的分類
(1)靜態多態
? 又叫早綁定。
? 一個類中互為重載的函數的情況。
// 靜態多態,又叫早綁定。
// 程序在運行之前——在編譯階段已經能確定調用哪個方法(函數重載,通過參數的不同)。
// Rect.cpp
class Rect {
public:
int calcArea(int width);
int calcArea(int width, int height);
}
(2)動態多態
? 又叫晚綁定。
? 必須以"封裝"和“繼承”為基礎。
? 虛函數為了解決動態多態問題而產生的。
// 動態多態,又叫晚綁定。
// 程序在運行時才能確定要調用類的哪個方法。
// Shape.cpp
class Shape { // 基類
public:
virtual double calcArea(){ // 虛函數
cout << "calcArea" << endl;
return 0.0;
}
};
// Circle.cpp
class Circle : public Shape { // 派生類
public:
Circle(double r);
virtual double calcArea(){ // 虛函數
return 3.14 * m_dR * m_dR;
}
private:
double m_dR;
};
// Rect.cpp
class Rect : public Shape { // 派生類
public:
Rect(double width, double height);
virtual double clacArea(){ // 虛函數
return m_dWidth * m_dHeight;
}
private:
double m_dWidth;
double m_dHeight;
};
// main.cpp
int main(){
Shape *shape1 = new Circle(4.0);
Shape *shape2 = new Rect(3.0, 5.0);
// 程序在運行時才能確定要調用類的哪個方法。
shape1->calcArea();
shape2->calcArea();
delete shape1;
shape1 = NULL;
delete shape2;
shape2 = NULL;
return 0;
}