C++面向对象入门(三十二)虚函数和实现动态联编的条件

虚函数: 一个成员函数, 该函数在基类的内部声明并且被派生类重新定义, 为了创建虚函数, 应在基类该函数
声明的前面加上virtual关键字
如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含
虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要.
动态联编需要满足三个条件:
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数
 
虚函数只能是非静态成员函数
构造函数能重载, 不能定义为虚函数, 而析构函数不能重载, 但是可以被定义为虚函数
 
代码示例:

 

#include <iostream>
using namespace std;

/*
虚函数: 一个成员函数, 该函数在基类的内部声明并且被派生类重新定义, 为了创建虚函数, 应在基类该函数
声明的前面加上virtual关键字
如果一个类的某个成员函数被说明为虚函数, 意味着该成员在派生类中可能存在不同的实现方式, 当继承包含
虚函数的类时, 派生类将重新定义该虚函数以符合自身的需要.

动态联编需要满足三个条件:
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数

*/
class A49
{
public:
    A49();
    void callVtFunc();
    virtual void vtFunc();
};

class B49 : public A49
{
public:
    B49();
    virtual void vtFunc();
};



int main()
{
    A49 a;
    B49 b;
    a.callVtFunc();
    b.callVtFunc();
    system("pause");
}

A49::A49()
{
}


void A49::callVtFunc()
{
    vtFunc();
}

void A49::vtFunc()
{
    cout << "function of A49" << endl;
}

B49::B49()
{
}



void B49::vtFunc()
{
    cout << "function of B49" << endl;
}

 

posted @ 2020-09-01 15:50  DNoSay  阅读(1036)  评论(0编辑  收藏  举报