1,介绍

虚函数是定义在基类中的函数,子类必须对其进覆盖。在类中声明虚函数的格式: virtual void display(); 

2,作用

(1)定义子类对象,并调用对象中未被子类覆盖的基类函数A。同时在该函数A中,又调用了子类覆盖的基类函数B。此刻将会调用基类中的函数B, 而我们原本是想调用是子类中的覆盖函数B。 而使用虚函数就可以解决这个问题。

举个例:

#include<iostream>using namespace std;
class Father{void display() {cout<<"Father.dispaly() \n";} void fatherShowDisplay(){display();
}class Son:public father{public:void display(){cout<<"Son.dispaly() \n";}
}int main(){Son son;son.fatherShowDisplay();
}

通过基类中未被覆盖的函数,来调用子类中被覆盖的display函数。

输出的结果是 Father.display() 。

修改方法: 将display() 变成虚函数。

#include<iostream>
using namespace std;
class Father                    //基类 Father
{
public:virtual void display() {cout<<"Father::display()\n";}//在函数中调用了,子类覆盖基类的函数display() void fatherShowDisplay() {display();}
};class Son:public Father                 //子类Son
{
public://重写基类中的display()函数void display() {cout<<"Son::display()\n";}
};int main()
{Son son;        //子类对象 son.fatherShowDisplay();    //通过基类中未被覆盖的函数,想调用子类中覆盖的display函数
}

输出结果:Son::display() 。

(2)在使用指向子类对象的基类指针,并调用子类中的覆盖函数时,如果该函数不是虚函数,那么将调用基类中的该函数;如果该函数是虚函数,则会调用子类中的该函数。

代码:

#include<iostream>using namespace std;class Father{public:void display(){cout<<"father.display()";}
};class Son::Father{public:void display(){cout<<"son.display";}
};main(){
Father *p ;
Son son;p = &son;p->display();
}

定义一个基类指针, 让它指向子类覆盖的函数,如果该函数没有使用virtual,输出的结果就是 father.dispaly

C++中virtual 虚函数的作用介绍相关推荐

  1. C++中虚函数的作用

    C++中的虚函数的作用主要是实现了多态的机制.基类定义虚函数,子类可以重写该函数:在派生类中对基类定义的虚函数进行重写时,需要再派生类中声明该方法为虚方法. 当子类重新定义了父类的虚函数后,当父类的指 ...

  2. C++中的虚函数实现原理

    前言 在博客看到一位博主写的关于虚函数的实现原理写得通俗易懂,特别好,直接转载过来学习,这里没有原博主的博客链接,因为看到的只是另一个博主的对其的转载,而且并没有附上原博的链接. 正文 C++中的虚函 ...

  3. 虚函数的作用及其底层实现机制

    1. C++中虚函数的作用和多态 虚函数: 实现类的多态性 关键字:虚函数:虚函数的作用:多态性:多态公有继承:动态联编 C++中的虚函数的作用主要是实现了多态的机制.基类定义虚函数,子类可以重写该函 ...

  4. c++中虚函数的作用(virtual)

    我们知道,在同一类中是不能定义两个名字相同.参数个数和类型都相同的函数的,否则就是"重复定义".但是在类的继承层次结构中,在不同的层次中可以出现名字相同.参数个数和类型都相同而功能 ...

  5. C++中的虚函数(virtual function)

    1回顶部 一.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的函数.假设我们有下面的类层次: class A { public: virtua ...

  6. C#中的虚函数virtual

    简单介绍虚函数virtual 在某基类中声明 virtual 并在一个或多个派生类中被重新定义的成员函数称为虚函数. 虚函数的作用就是实现多态性(Polymorphism),多态性是将接口与实现进行分 ...

  7. c 语言的虚函数,C 中的虚函数(virtual function)

    一.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的函数.假设我们有下面的类层次: class Father { public: virtua ...

  8. c 语言中虚方法有什么作用是什么,虚函数的作用?

    定义 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数[1] 语法:virtual 函数返回类型 函数名(参数表) {函数体;} 用途:实现多态性,通过指向派生类的 ...

  9. 关于C++中虚函数的作用

    昨天去面试,面试官问道:虚函数有什么作用,我解释了半天也没解释清楚,其实说到底还是理解不够深刻,或者说简直没什么理解,连子类重写父类的普通函数和子类重写父类的虚函数的区别都不知道,真是弱爆了!!1 虚 ...

最新文章

  1. Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享!
  2. mysql中序列的使用,在MySQL中使用序列的简单教程
  3. MapInfo数据到ARCGIS数据Shapefile的转换
  4. MySQL分布式集群
  5. 吴恩达 coursera ML 第十二课总结+作业答案
  6. angular学习笔记之父子传值
  7. Go语言程序记录日志
  8. asp.net学习之再论sqlDataSource 2
  9. Computed property “value1“ was assigned to but it has no setter.
  10. 给Android SDK设置环境变量
  11. Jaakko isalo谈《愤怒的小鸟》创意来源
  12. 这可能是最全的JAVA入门教程 ~
  13. 5G投资理财H5源码+带独家代理二开前端开发/学习培训专用型
  14. JavaWeb学习(较全较简)
  15. PHP数据库CURD接口与实现(接口实战)
  16. 多开QQ出现多次验证码怎么办?
  17. 计算机wps文字基础知识,计算机基础及WPS Office应用常见考试内容
  18. uni-app实现支付及项目打包上传
  19. AAT美式发音学习资源
  20. Vba Excel 到 word 实例

热门文章

  1. 跃层房屋的优缺点是什么
  2. linux ntp时间同步配置,Linux ntp 时间同步服务配置
  3. 关于JDK 11 更新的17个最终JEP预览
  4. WebSocket连接错误的解决方案
  5. 百面机器学习总结笔记(第十三章 生成对抗网络)
  6. linux下static状态,关于linux的添加永久静态路由的static-routes方法
  7. 自学编程和科班出身的人,差距在哪?
  8. Realm数据库使用教程(一):Realm配置和Stetho配置
  9. 【报告分享】2022人才市场洞察及薪酬指南-科锐国际(附下载)
  10. 易语言取linux命令返回值,易语言取程序返回值写法