多态 polymorphism
基类成员函数添加了virtual关键字,该函数在执行时绑定。否则在编译时绑定。所以
基类希望其派生类进行覆盖的函数,定义为虚函数
例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
using namespace std;
class Animal{
public:
void sound(){
cout << "??" << endl;
}
};
class Cat : public Animal{
public:
void sound(){
cout << "Miao Miao" << endl;
}
};
class Dog : public Animal{
public:
void sound(){
cout << "Wang Wang" << endl;
}
};
int main(int argc, char **argv){
Animal *animal;
animal = new Cat;
animal->sound();
animal = new Dog;
animal->sound();
}
|
输出
lcl@FX50JK:~/Documents/hub/learning-record/cpp$ ./polymorphism
??
??
可见animal指针虽然指向子类Cat和Dog,但是并没用他们的sound方法。基类使用virtual关键字
1
2
3
4
5
6
|
class Animal{
public:
virtual void sound(){
cout << "??" << endl;
}
};
|
输出
lcl@FX50JK:~/Documents/hub/learning-record/cpp$ ./polymorphism
Miao Miao
Wang Wang