C++多态性表示的是调用成员函数时,会根据调用函数的对象类型来执行不同的函数。
静态多态
函数在调用前就已经确定好怎么执行了。
动态多态
函数根据调用对象选择调用的函数。这个过程称为动态链接,或后期绑定。
这是通过虚函数实现的,派生类继承基类,并重新定义了基类中的某些函数,那么就需要将基类中的相关函数前面加上关键字virtual.
```
class Base {
public:
void show() {
cout << "this is the Base class" << endl;
}
};
class Son : public Base {
public:
void show() {
cout << "this is the Son class" << endl;
}
};
void doShow(Base & base) {
base.show();
}
void test0() {
Son s;
doShow(s);
}
```
执行结果:
```
this is the Base class
请按任意键继续. . .
```
可以看到没有加virtual,son对象调用的show函数是基类中的,如果想让它调用自己重载的版本,就需要在基类 的成员函数show()前加上virtual。派生类中的相关函数virtual可以加也可以不加,在C++11标准中,可以加上override表示这是重载基类中的一个函数。
class Base {
public:
virtual void show() {
cout << "this is the Base class" << endl;
}
};
this is the Son class
纯虚函数
virtual 返回类型 函数名(参数) = 0;
形如以上成员函数,称为纯虚函数,在基类中不能给出有意义的实现,所以它无法实例化对象,派生类继承基类函数时,必须重写基类中的纯虚函数。