c++ virtual 虚函数 和 非虚函数 覆盖时候的差异

技术分享 2022-03-07 14:53:17

虚函数如果被覆盖,原来的函数是直接被override掉的,也就是这个函数没了

非虚函数覆盖,原来的函数还存在,还可以通过super,索引等方式访问到

类似参数默认值机制,给类设置了一个默认值(默认函数)


class A

{

public:

    void print(){ printf("A non-virtual\n"); }    // 非虚函数

    virtual void printV(){ printf("A virtual\n"); }    // 虚函数

};

 

class B:public A

{

public:

    void print(){ printf("B non-virtual\n"); }        // 覆盖非虚函数

    virtual void printV(){ printf("B virtual\n"); }    // 覆盖虚函数

};

 

void main()

{

    B b;

    b.print();

    b.printV();

 

    A*pa = &b;

    pa->print();

    pa->printV();

}


输出:


B non-virtual

B virtual

A non-virtual

B virtual


咨询小瓶科技
咨询我们
顶部