1.0 C++远征:多态的概述与虚函数
1-1多态的概述与虚函数
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;
}