多态 | 绑定方式 |
编译时多态(重载、强制和参数多态) | 静态绑定 |
运行时多态 | 动态绑定 |
虚函数:
虚函数是动态多态的基础,虚函数必须是非静态的成员函数。虚函数经过派生之后,在类族中就可以实现运行时多态。
虚函数声明:virtual 函数类型 函数名(参数表);
虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数实现的时候。
运行时多态需要满足三个条件:
(1) 类之间要满足兼容性规则
(2) 基类要声明虚函数
(3) 由成员函数调用或者通过指针、引用来访问虚函数。
// Demo_8_2.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
class Base1 {
public:
virtual void display()const; //声明虚函数
};
void Base1::display()const {
cout << "Base1::display()" << endl;
}
class Base2 :public Base1 {
public:
void display()const; //由于继承类Base1,派生类的display函数默认为虚函数
};
void Base2::display()const {
cout << "Base2::display()" << endl;
}
class Derived :public Base2 {
void display()const; //Base2的虚函数
};
void Derived::display()const {
cout << "Derived::display()" << endl;
}
void fun(Base1 *ptr) { //参数为指向基类对象的指针
ptr->display(); //通过对象名—>成员名访问
}
int main()
{
Base1 base1;
Base2 base2;
Derived derived;
fun(&base1);
fun(&base2);
fun(&derived);
system("pause");
return 0;
}
运行结果: