C++ 如何在子类构造函数中调用父构造函数?

C++ 如何在子类构造函数中调用父构造函数?,c++,C++,我已经搜索过了,这似乎是在C++中调用超类构造函数的唯一方法: 类超类 { 公众: 超类(int-foo) { //和福做点什么 } }; 类子类:公共超类 { 公众: 子类(intfoo,intbar) :SuperClass(foo)//在子类的初始化列表中调用超类构造函数。 { //用酒吧做点什么 } }; 但我想知道,如何在构造函数体中调用超类构造函数而不是初始化列表 我必须处理我孩子的构造函数的输入,并将复杂的已处理参数传递给超类构造函数,我如何实现这一点?你不能 必须先初始化类的父

我已经搜索过了,这似乎是在C++中调用超类构造函数的唯一方法:

类超类
{
公众:
超类(int-foo)
{
//和福做点什么
}
};
类子类:公共超类
{
公众:
子类(intfoo,intbar)
:SuperClass(foo)//在子类的初始化列表中调用超类构造函数。
{
//用酒吧做点什么
}
};
但我想知道,如何在构造函数体中调用超类构造函数而不是初始化列表

我必须处理我孩子的构造函数的输入,并将复杂的已处理参数传递给超类构造函数,我如何实现这一点?

你不能

必须先初始化类的父部分,然后才能启动子类。因此,您必须在初始值设定项列表的前面执行此操作

但是,您可以让超类::initialize()完成您需要执行的操作,并且您的超类构造函数可以调用它。

您不能

必须先初始化类的父部分,然后才能启动子类。因此,您必须在初始值设定项列表的前面执行此操作


但是,您可以使用超类::initialize()来执行您需要执行的操作,并且您的超类构造函数可以调用它。

必须运行基类构造函数来初始化基类,然后才能进入派生类构造函数的主体。成员初始值设定项列表是初始化基类的唯一方法。如果对参数有复杂的要求,请使用辅助函数来计算参数

例如:

类超类
{
公众:
超类(int-foo)
{
//和福做点什么
}
};
类子类:公共超类
{
私人:
静态intbasehelper(intfoo)
{
//对福做复杂的事
返回复杂事物的结果;
}
公众:
子类(intfoo,intbar)
:SuperClass(basehelper(foo))//在子类的初始化列表中调用超类构造函数。
{
//用酒吧做点什么
}
};
如果基类参数只需要构造派生类时已知的知识,则必须

  • 再接再厉,
  • 找到一种方法来记忆助手的结果(可能插入一层抽象),并在以后的构建中应用结果
  • 修改基类,使其具有更简单的构造函数并支持两阶段初始化,或
  • 做一些完全不同的事情。对于您的用例来说,这可能是一个很好的建议

必须先运行基类构造函数来初始化基类,然后才能进入派生类构造函数的主体。成员初始值设定项列表是初始化基类的唯一方法。如果对参数有复杂的要求,请使用辅助函数来计算参数

例如:

类超类
{
公众:
超类(int-foo)
{
//和福做点什么
}
};
类子类:公共超类
{
私人:
静态intbasehelper(intfoo)
{
//对福做复杂的事
返回复杂事物的结果;
}
公众:
子类(intfoo,intbar)
:SuperClass(basehelper(foo))//在子类的初始化列表中调用超类构造函数。
{
//用酒吧做点什么
}
};
如果基类参数只需要构造派生类时已知的知识,则必须

  • 再接再厉,
  • 找到一种方法来记忆助手的结果(可能插入一层抽象),并在以后的构建中应用结果
  • 修改基类,使其具有更简单的构造函数并支持两阶段初始化,或
  • 做一些完全不同的事情。对于您的用例来说,这可能是一个很好的建议

basehelper
可能应该是静态的(或非成员函数),因为您在对象完全构造之前调用它。
basehelper
可能应该是静态的(或非成员函数),因为您在对象完全构造之前调用它。您的意思是“您的子类构造函数可以调用它”吗,我想我的意思是两个人都可以这么说。那没有多大意义,因为那样会导致双重损失-initialization@RemyLebeau这取决于默认构造函数的重量。当您实际进入构造函数时,超类已经被构造好了。那部分是绕不开的。你可以选择你想要的构造函数,你可以调用方法来做进一步的初始化。你的意思是“你的子类构造函数可以调用它”吗?我想我的意思是两者都可以调用它。这没有多大意义,因为这会导致双重错误-initialization@RemyLebeau这取决于默认构造函数的重量。当您实际进入构造函数时,超类已经被构造好了。那部分是绕不开的。您可以选择所需的构造函数,并且可以调用方法进行进一步的初始化。