c++09、虚函数

来源:互联网 发布:我的少女时代 知乎 编辑:程序博客网 时间:2024/06/04 01:09

虚函数是动态绑定的基础。动态绑定,也就是多态。当然如果分的细一点,又分为编译多态(模板)和运行多态(虚函数)。

#include <iostream>using namespace std;class Base           // 基类Base的声明{public:virtual void show()    { cout << "Base::show()" << endl; }      // 虚成员函数show};class Child0 : public Base     // 类Base的公有派生类Child0的声明{public:void show()    { cout << "Child0::show()" << endl; }    // 虚成员函数show};class Child1 : public Child0   // 类Child0的公有派生类Child1的声明{public:void show()    { cout << "Child1::show()" << endl; }    // 虚成员函数show};void CallShow(Base *pBase)     // 一般函数,参数为基类指针{pBase->show();}int main(){Base base;               // 声明Base类的对象Base *pBase;             // 声明Base类的指针Child0 ch0;              // 声明Child0类的对象Child1 ch1;              // 声明Child1类的对象pBase = &base;        // 将Base类对象base的地址赋值给Base类指针pBase   输出baseCallShow(pBase);pBase = &ch0;            // 将Child0类对象ch0的地址赋值给Base类指针pBase 输出ch0CallShow(pBase);pBase = &ch1;            // 将Child1类对象ch1的地址赋值给Base类指针pBase 输出ch1CallShow(pBase);return 0;}


运行结果:


注:经常遇到的疑问是,为什么不能声明虚构造函数?
 
 答:多态是指不同的对象接收了同样的消息而导致完全不同的行为,它是针对对象而言的,虚函数是运行时多态的基础,当然也是针对对象的,
 而构造函数是在对象生成之前调用的,即运行构造函数时还不存在对象,那么虚构造函数也就没有意义了。
当然如果这样写了,正常情况下也不会通过编译。

0 0
原创粉丝点击