c++ - 在当前类的构造函数中调用其他类定义的虚函数

标签 c++

class A
{
public:
    ...
    virtual bool Function(..) const {...}
}

class B : public A
{
public:
    ...
    virtual bool Function(..) const {...}
}

class OtherClass
{
public:
    OtherClass(A& a)
    {
        m_bool = a.Function(..);
    }
private:
    bool m_bool;
}

假设类A或类B在构造类OtherClass之前完全初始化。

问题>在OtherClass的构造函数中调用虚函数是否有问题?

最佳答案

没有,怎么会有问题呢? A 的实例(通过引用)传递给 OtherClass 的构造函数已经完全初始化,因此其上的虚函数按预期工作。

您听到的警告是关于在其构造函数中调用您正在构造的对象的虚函数;在这种情况下,虚拟调度被禁用,即在每个基类的构造函数中调用的虚函数版本是构造函数正在运行的基类之一。

这个想法是,在基类构造函数中,对象还没有变成它的最终类型;换句话说,当您构造一个从某个基类继承的对象时,它从“最基本”类型开始,并在每个派生类构造函数运行时转换为派生类型。这反射(reflect)了各种构造函数在运行时看到的虚函数版本。

您可以阅读更多详细信息 here .

同样,这不会影响传递给构造函数的任何对象,因为它们已经完全构造,所以它们的“最终类型”(以及相应的虚函数集)已经完全成立。

关于c++ - 在当前类的构造函数中调用其他类定义的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806193/

相关文章:

android - 如何将 C++ 性质添加到 Eclipse Android 项目而不将其转换为 C++ 项目

c++ - 在头文件中声明类型时,“unordered_set”未命名类型

c# - 使用 MsiGetProductInfo 检查是否安装了 Microsoft Word

c++ - 强制编译器抛出错误的最简单方法是什么?

c++ - 有没有办法用类实例指针调用构造函数?

c++ - 运行在同一台机器上编译的程序时 GLIBCXX 版本错误

c++ - 在 C++ 中处理类的动态属性

c++ - 如何将 void* 存储在堆栈 C++ 容器中

c# - 文本差异应用程序如何工作?

c++ - Qt 拖放 : cannot move when copy is enabled (Ubuntu Gnome)