构造函数可以调用虚函数吗?语法上通过吗?语义上可以通过吗?
来源:互联网 发布:倍投软件下载 编辑:程序博客网 时间:2024/04/30 18:43
问题回答:
可以;通过(程序可以正常运行);不通过(不是我们想要的结果)。
原文链接:http://www.cnblogs.com/hellogiser/p/whether-constructor-can-call-virtual-function.html
#include <iostream>using namespace std;class Base{public: Base() { cout << "Base::Base()" << endl; Foo(); } virtual void Foo() { cout << "Base::Foo " << 1 << std::endl; }};class Derived : public Base{public: Derived() : Base(), m_pData(new int(2)) { cout << "Derived::Derived()" << endl; Foo(); } ~Derived() { delete m_pData; } virtual void Foo() { cout << "Derived::Foo " << *m_pData << std::endl; }private: int *m_pData;};int main(){ Base *p = new Derived(); delete p; return 0;}
如上程序的运行结果为:
基类部分在派生类部分之前被构造,当基类构造函数执行时派生类中的数据成员还没被初始化。如果基类构造函数中的虚函数调用被解析成调用派生类的虚函数,而派生类的虚函数中又访问到未初始化的派生类数据,将导致程序出现一些未定义行为和bug。
构造函数直接调用 纯虚函数(pure virtual function),编译会报错: unresolved externals
构造函数间接调用 纯虚函数(pure virtual function)(即:构造函数调用普通函数,但是普通函数又调用了纯虚函数),编译阶段不会报错,可以生成可执行文件,但是运行会出错,因为纯虚函数没有定义。
0 0
- 构造函数可以调用虚函数吗?语法上通过吗?语义上可以通过吗?
- 可以直接调用构造函数吗??
- 构造函数可以为虚函数吗?
- C++中可以在构造函数中调用另一个构造函数吗?
- 【转】C++在构造函数中可以调用另一个构造函数吗
- C++中可以在构造函数中调用另一个构造函数吗?
- C++中可以在构造函数中调用另一个构造函数吗?
- (面试)构造函数可以为虚函数吗?不能
- 构造函数可以被继承吗?
- 类的构造函数可以私有吗?
- 抽象类可以有构造函数吗
- 【javascript】任何函数,只要通过new操作符来调用,那他就可以作为构造函数
- 内联函数、构造函数、静态成员函数可以是虚函数吗?
- 构造函数中是否可以调用虚函数
- 构造函数、析构函数可以抛出异常吗?为什么?
- 构造函数和析构函数可以声明为虚函数吗
- 通过傅立叶逆变换取原函数,在物理上也可以看成是一种波的干涉吧
- 一个构造函数可以调用另一构造函数
- 3675: [Apio2014]序列分割
- 文章标题
- Spring整合Hibernate,Druid(Maven)
- 第五周项目1-三角形类雏形(2)
- 40. Combination Sum II
- 构造函数可以调用虚函数吗?语法上通过吗?语义上可以通过吗?
- 第四章 μCOS-Ⅱ的中断和时钟
- linux下打开、关闭tomcat,实时查看tomcat运行日志
- mangos源码分析
- PHP 错误信息屏蔽
- JSTL标签库_01(核心标签库)
- UnityGUI系统之InputField
- QML基础元素
- HDFS NodeLabel特性