在涉及到虚函数的情况下,C++构造函数的构造顺序为:先调用构造函数,虚表指针初始化,用户代码;如涉及到多重继承情况,初始化顺序为基类、子类(从左至右),假设一个类的继承情况如下图,其初始化顺序为:Point,Point3d,Vertex,Vertex3d,PVertex,而这样的调用顺序说明在构造函数中调用虚函数是安全的,即时在初始化列表中基类构造函数在用户函数后面,g++编译器亦会自动调整。

我们假设上述类的虚函数中设计到虚函数(析构函数未计算)如上图所示,虚函数中出现了重载,子类中选择性重载虚函数,虚函数与重载就会出现:重载优先级高于虚函数的情况。PVertex类中只实现z(int)函数的情况下:

PVertex vertex();
Vertex3d *p = &vertex;
Vertex *q = &vertex;
PVertex *p1 = &vertex;
cout << "call z function:" << endl;
p1->z(0.1f);
输出结果如下:
Point::Point()
Point3d::Point3d()
Vertex::Vertex()
Vertex3d::z(int)3
Vertex3d::Vertex3d(int)
PVertex::PVertex()
call z function:
PVertex::z(int):0
~PVertex::PVertex()
~Vertex3d::Vertex3d()
~Vertex::Vertex()
~Point3d::Point3d()
~Point::Point()

此时PVertex并不调用V::z(float),PVertex::z(int)覆盖了函数Vertex::z(float),覆盖解决方法还是在PVertex中加入声明: using Vertex3d::z。

 

 

最新文章

  1. BUTTONS V. 2.0.0——CSS按钮库
  2. Prim算法(三)之 Java详解
  3. NOIP2010提高组乌龟棋 -SilverN
  4. cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused
  5. 关于JS及应用程序开发的一些体会
  6. 命令cd
  7. Qualcomm Web Site For Android Development
  8. Dedecms调用文章发布时间的方法
  9. char、varchar、varchar(2)的区别
  10. php获取当前月与上个月月初及月末时间戳的方法
  11. mysql的执行过程
  12. js实现原生选项卡
  13. linux下pppoe连接管理
  14. Android多线程编程&lt;二&gt;Handler异步消息处理机制之Message
  15. 第 15 章 位操作(fields)
  16. [PHP-DI] 理解依赖注入
  17. [转]Linux内核源码详解--iostat
  18. python mysql 封装
  19. Android-Java-了解编译
  20. nio入门教程

热门文章

  1. Win10
  2. C# 4.0 新特性dynamic (待学习)
  3. ubuntu 下安装mysql,以及配置远程登录
  4. Openwrt 编译报错:rootfs image is too big解决方法
  5. 【Python④】python恼人的字符串,格式化输出
  6. Windows下QT Creator工程中添加文件夹
  7. linux 内核邮件列表
  8. golang调用EXE
  9. IE关闭兼容性视图
  10. 配置 vim