c++ 构造函数中调用虚函数的实现方法

 更新时间:2016年12月21日 09:59:27   投稿:jingxian  
下面小编就为大家带来一篇c++ 构造函数中调用虚函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数。这种调用都是对象已经构建完成的情况。那如果在构造函数中调用虚函数,会怎么样呢?

有这么一段代码:

class A
{
public:
  A ():m_iVal(0){test();}
  virtual void func() { std::cout<<m_iVal<<‘ ';}
  void test(){func();}
public:
int m_iVal;
};
class B : public A
{
public:
  B(){test();};
  virtual void func()
  {
    ++m_iVal;
    std::cout<<m_iVal<<‘ ';
}
};
int main(int argc ,char* argv[])
{
  A*p = new B;
  p->test();
  return 0;
}

输出: 0 1 2

也就是说,在构造函数中调用虚函数,调用的是正在构造的类中的虚函数,而不是子类的虚函数。

理一下程序。new了一个B对象,首先要调用基类构造函数,也就是A类的构造函数。调用test(),再调用虚函数func(),这时候用的是基类版本。之后再调用子类B的构造函数,这时调用的是子类虚函数func()。至于最后一次调用func(),根据多态,调用的是真实虚函数。

以上就是小编为大家带来的c++ 构造函数中调用虚函数的实现方法全部内容了,希望大家多多支持脚本之家~

相关文章

  • 解析C++类内存分布

    解析C++类内存分布

    本篇文章介绍了C++类内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下
    2021-06-06
  • C语言学生信息管理系统

    C语言学生信息管理系统

    这篇文章主要为大家详细介绍了C语言学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 详解C++中如何将构造函数或析构函数的访问权限定为private

    详解C++中如何将构造函数或析构函数的访问权限定为private

    这篇文章主要介绍了详解C++中如何将构造函数或析构函数的访问权限定为private的方法,文中还解释了构造函数与虚函数的区别,需要的朋友可以参考下
    2016-03-03
  • C++之Boost::array用法简介

    C++之Boost::array用法简介

    这篇文章主要介绍了C++之Boost::array用法简介,较为详细的分析了Boost::array中的常见用法,并用实例的形式予以总结归纳,需要的朋友可以参考下
    2014-10-10
  • C语言版五子棋游戏的实现代码

    C语言版五子棋游戏的实现代码

    这篇文章主要为大家详细介绍了C语言版五子棋游戏的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++实现恶搞电脑关机小程序的示例代码

    C++实现恶搞电脑关机小程序的示例代码

    这篇文章主要为大家详细介绍了如何利用C++实现一个简单的恶搞电脑关机小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-11-11
  • QT编写简单登录界面的实现示例

    QT编写简单登录界面的实现示例

    登陆界面是网页中常见的界面,本文主要介绍了QT编写简单登录界面的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • C数据结构循环链表实现约瑟夫环

    C数据结构循环链表实现约瑟夫环

    这篇文章主要介绍了C数据结构循环链表实现约瑟夫环的相关资料,需要的朋友可以参考下
    2017-05-05
  • VC++实现通过API来查看程序错误信息的方法

    VC++实现通过API来查看程序错误信息的方法

    这篇文章主要介绍了VC++实现通过API来查看程序错误信息的方法,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C/C++中的 Qt StandardItemModel 数据模型应用解析

    C/C++中的 Qt StandardItemModel 数据模型应用解析

    QStandardItemModel 是标准的以项数据为单位的基于M/V模型的一种标准数据管理方式,本文给大家介绍C/C++中的 Qt StandardItemModel 数据模型应用解析,感兴趣的朋友跟随小编一起看看吧
    2021-12-12

最新评论