首页 > 其他分享 >关于虚函数

关于虚函数

时间:2023-03-23 21:33:46浏览次数:31  
标签:调用 函数 子类 关于 父类 重写 指针

虚函数实现了C++的多态特性。

重写虚函数,虚函数的参数类别和个数不可以改变,返回值类型也不可以改变。存在一个例外,当A类的虚函数返回A类指针,B类继承后返回B类指针,但要求A类指针和B类指针可以相互转换。覆盖和重写为一个意思,重载则不同。

可以分为纯虚函数和虚函数,

  •   对于父类的纯虚函数,子类在继承之后必须实现不然子类无法实例化。
  •   而对于虚函数,子类可以选择覆盖也可不覆盖。

final和override关键字。

override跟在覆盖后的虚函数,可以防止不小心修改了参数类型或者个数,此时编译器会报错。

final关键字表示该函数不能进行覆盖。

可以同时使用override和final修饰,因为他们不冲突而且可以使编译器和用户更好理解。

当父类的非虚函数,子类对其重写之后。如果使用子类的对象调用该函数或者子类对象的指针调用该函数,则运行子类的重写版本,但是如果是父类指针指向子类对象,进行调用那么不会调用子类函数而是父类的函数。

eg1:

Father* p=new Son();

p->func();此时会调用父类的func();

eg2:

Son son;或者Son *son=new Son();

son.func();调用子类的fun()

对于该现象的理解

  虚函数机制是动态的,也就是可以在运行时确定调用的函数。然后如果是非虚函数的重写,父类指针无法找到子类对应的函数,只能调用自身的函数。

既然可以用子类对象调用子类函数,那么为什么需要使用虚函数机制?

  实际开发过程中,当我们使用一些基类、框架的时候,它们是事先写好的,使用的时候不能修改库函数的源码,只能同派生类来重新实现库函数。有些库函数由框架调用,因此使用虚函数是一个好的解决方法。

标签:调用,函数,子类,关于,父类,重写,指针
From: https://www.cnblogs.com/hailanben/p/17247274.html

相关文章