【为什么】构造函数中可以调用虚函数吗?

简介: 【为什么】构造函数中可以调用虚函数吗?
class Base
{
public:
  Base()
  {
    Fuction();
  }
  virtual void Fuction()
  {
    cout << "Base::Fuction" << endl;
  }
};
class A : public Base
{
public:
  A()
  {
    Fuction();
  }
  virtual void Fuction()
  {
    cout << "A::Fuction" << endl;
  }
};
// 这样定义一个A的对象,会输出什么?
A a;

image.gif首先回答标题的问题,调用当然是没有问题的,但是获得的是你想要的结果吗?或者说你想要什么样的结果?

有人说会输出:

A::Fuction
A::Fuction

image.gif

如果是这样,首先我们回顾下C++对象模型里面的构造顺序,在构造一个子类对象的时候,首先会构造它的基类,如果有多层继承关系,实际上会从最顶层的基类逐层往下构造(虚继承、多重继承这里不讨论),如果是按照上面的情形进行输出的话,那就是说在构造Base的时候,也就是在Base的构造函数中调用Fuction的时候,调用了子类A的Fuction,而实际上A还没有开始构造,这样函数的行为就是完全不可预测的,因此显然不是这样,实际的输出结果是:

Base::Fuction  
A::Fuction

image.gif

这篇文章参考于https://www.nowcoder.com/questionTerminal/4ef1d67edee049c78aa597067c519246

相关文章
|
6月前
|
iOS开发 开发者
ios开发打包的ipa文件无法安装的解决方案
iOS开发中,若IPA无法安装,通常因误打了App Store格式包。需用Ad Hoc签名(绑定测试机UDID)重新打包。安装方式:① iTunes数据线安装;② 上传至yunedit生成下载页,微信分发——后者更高效便捷。
|
网络协议 Java 网络架构
关于TCP/IP协议栈(转)
1. TCP/IP协议栈 与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层、表示层和会话层。 在网络接口层的主要协议有:ARP、RARP等。
1303 0
|
Oracle 关系型数据库 Linux
远程桌面 NoMachine 的快速安装与使用
        对于需要经常远程到X windows的网友来说,VNC与Xmanager经常被使用,而NoMachine也是不错的选择之一,该工具简单,易用,尤其是在低带宽、慢速率的网络环境下工作性能良好。
6010 0
|
9天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7689 13
|
7天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1647 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
4天前
|
人工智能 JavaScript 芯片
DeepSeek 官方偷偷上传 Harness 桌面端安装包,我已经用上了。。附最新下载地址
DeepSeek Harness 官方的桌面端安装包被网友扒出来了,2 分钟讲明白如何使用,体验如何,适合作为 AI 编程工具么?附最新 Windows 和 Mac 双端的下载地址
1418 1
|
8天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
1203 9

热门文章

最新文章