虚函数

Posted xxxsea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚函数相关的知识,希望对你有一定的参考价值。

刚开始学习C++,每天懵懵懂懂看一点,有点乱

现在开始一点点整理

C++虚函数的作用:给派生类重写用的,普通的函数只能重载,通过修改函数形参的个数或者类型,派生类B继承基类A,A类中有个fun函数,B类根据自身需求更改了fun函数

class A

public:
    void fun()cout << "A" << endl;      

class B : public A

public:
    void fun()cout  <<"B" << endl;  

在main中如下定义:

A a;
B b;
a.fun(); //A
b.fun(); //B

上述代码结果正常

但是C++有许多特性,其中就有基类指针可以指向子类对象 (为甚么,有甚好处,不知道,待更新)

当main代码如下:

A *a = new A;
A *b = new B;
a->fun();
b->fun();

运行时会报错,b分不清该调用A类的fun还是B类的fun,二义性错误

这个时候,虚函数的作用就出来了,

class A

public:
    virtual void fun()cout << "A" << endl;      

class B : public A

public:
    void fun()cout  <<"B" << endl;  

此时,上述代码就不会报错了,基类用virtual修饰了fun,让派生类可重写fun函数

2019-09-30

以上是关于虚函数的主要内容,如果未能解决你的问题,请参考以下文章

static函数如何调用虚函数

vc 父类实现一个虚函数,子类继承并也实现这个虚函数,子类调用这个虚函数,父类这个虚函数会不会执行?

C++中的虚函数以及虚函数表

通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)

虚函数与纯虚函数

虚函数