首页 > 其他分享 >构造函数中可以调用虚函数吗?

构造函数中可以调用虚函数吗?

时间:2023-02-23 17:00:39浏览次数:30  
标签:Fuction 函数 子类 调用 构造 Base 构造函数

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;

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

有人说会输出:

A::Fuction
A::Fuction

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

Base::Fuction  
A::Fuction

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

标签:Fuction,函数,子类,调用,构造,Base,构造函数
From: https://www.cnblogs.com/wozhuyinghao/p/17148698.html

相关文章

  • 我可以从构造函数中调用虚函数吗?
    是的,但要小心。它可能不会做你期望的。在构造函数中,虚拟调用机制被禁用,因为从派生覆盖课程还没有发生。对象是从基础向上构建的,“派生前的基础”。考虑到#include<......
  • python入门之函数返回值的应用
    """函数返回值应用"""#函数设计思想:#分而治之#干一件事#需求:定义两个数字相加的函数#defadd():#1.获取数据#number01=int(i......
  • shell中的函数
    函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程定义函数函数由两部分组成:函数名和函数体helpfunction语法一:f_name(){...函数体...}语法二......
  • Vue框架:9,Vue3的用法,setup函数,ref和reactive,计算属性和监听属性,生命周期,toRefs,script s
    目录前端开发之Vue框架一、Vue31、Vue3创建项目2、setup函数3、ref和reactive4、计算属性和监听属性5、生命周期6、toRefs7、scriptsetup的作用和lang8、Vue后台管理模板......
  • Feign调用时将请求头信息传递到调用下游方案
    一、需求分析现有接口存在对用户信息进行拦截鉴权需求,在使用Feign包调用下游接口时,需要将当前请求头一直传递下去。二、实现方案在参考了网上的各种资料之后,通......
  • 在线客服系统复制聊天链接,JS实现复制文本函数
    客服系统(gofly.v1kf.com)后台有这个功能,可以直接复制文本信息,JS实现的函数  functioncopyToClipboard(text){vardummy=document.createElement("input");//......
  • ABAP 委外采购收货调用过账bapi
    相关的表:ekko:采购凭证抬头表用于判断是否委外ekpo:采购凭证行项目表用于判断是否委外以及委外采购的数量resb:获取委外采购单中bom的相应预留mseg:获取已经委外原材......
  • PowerShell 调用接口插入模拟数据
       functioninsertUser($i=2){$str="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"#字符串#echo$str.ToCharArray()......
  • 06. 函数
    一、什么是函数  C程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是C程序的基本模块,是用于完成特定任务的程序代码单元。也就是说,main()函数......
  • Jmeter学习:常用内置函数
    常用函数一:  常用函数二:__counter功能介绍:生成一个计数器变量,每次使用的时候+1__counter(false,gseq)表示所有线程共用,所有线程及迭代共享计数。......