构造函数调用虚函数(构造函数里面调用虚函数会报错么)
本文目录
构造函数里面调用虚函数会报错么
调用当然是没有问题的,但是获得的是你想要的结果吗?
首先我们回顾下C++对象模型里面的构造顺序,在构造一个子类对象的时候,首先会构造它的基类,如果有多层继承关系,实际上会从最顶层的基类逐层往下构造(虚继承、多重继承这里不讨论),如果是按照上面的情形进行输出的话,那就是说在构造Base的时候,也就是在Base的构造函数中调用Fuction的时候,调用了子类A的Fuction,而实际上A还没有开始构造,这样函数的行为就是完全不可预测的,因此显然不是这样。
C++中“析构函数中调用虚函数采用静态联编”为什么正确
在构造函数和析构函数中调用虚函数,编译系统对构造函数和析构函数中调用虚函数采用静态联编,因为它们所调用的虚函数是自己的类,或者基类中定义的函数而不是在任何派生类中重定义的函数。所有这句话说的是正确的。
下面介绍一些相关知识:
什么是静态联编:
即在编译过程中进行联编被称为静态联编(static binding),又称为静态绑定、早期联编。
什么是动态联编:
即编译器必须能够在程序运行时选择正确的函数的代码,这被称为动态联编(dynamic binding),又称为动态绑定、晚期联编。
什么是虚函数:
虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用基类型别的指针指向其派生类的实例,然后通过基类的指针调用实际派生类的成员函数(基类指针可调用同名覆盖方法)。这种技术可以让基类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。
基类构造函数中怎么调用子类的虚函数
没有办法。
c++中类的初始化顺序是先基类后子类,基类在初始化时子类还未初始化,因此子类的相关数据如虚函数表等都还未初始化,无法调用虚函数
另外,类的析构顺序是先子类后基类,因此在基类的析构函数中也不要调用子类的虚函数
更多文章:
strike up(engage ** in a converstion 中文怎么讲)
2026年4月20日 08:20
php+mysql+ajax切换tab(html页面通过点击按钮,用ajax返回php在My**L中找到的值(新手求助!))
2026年4月20日 08:00
商城app制作软件(开发一个好一点的商城系统app需要多少钱)
2026年4月20日 06:40
xbox series s的浮点性能到底相当于哪个显卡?过去和现在CPU**与注重浮点性能还是整点性能
2026年4月20日 06:20
java类名命名规则(按照Java的标识符命名规则,下列表示一个类的标识符正确的是( ))
2026年4月20日 05:40




