gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:35:11 26 4
gpt4 key购买 nike

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

class SuperClass
{
public:

SuperClass(int foo)
{
// do something with foo
}
};

class SubClass : public SuperClass
{
public:

SubClass(int foo, int bar)
: SuperClass(foo) // Call the superclass constructor in the subclass' initialization list.
{
// do something with bar
}
};

但我想知道,如何在构造函数体中调用父类(super class)构造函数而不是初始化列表?

我必须处理我 child 的构造函数的输入并将复杂的处理参数传递给父类(super class)构造函数,我该如何实现?

最佳答案

在进入派生类构造函数体之前,必须运行一个基类构造函数来初始化基类。成员初始化列表是初始化基类的唯一方法。如果您对参数有复杂的要求,可以使用辅助函数来计算参数。

例子:

class SuperClass
{
public:

SuperClass(int foo)
{
// do something with foo
}
};

class SubClass : public SuperClass
{
private:
static int basehelper(int foo)
{
// do complicated things to foo
return result_of_complicated_things;
}
public:

SubClass(int foo, int bar)
: SuperClass(basehelper(foo)) // Call the superclass constructor in the subclass' initialization list.
{
// do something with bar
}
};

如果基类参数需要的知识仅在派生类构造时已知,则必须要么

  • 重复努力,
  • 找到一种方法来记住助手的结果(可能插入一个抽象层)并在稍后的构造中应用结果,
  • 修改基类使其具有更简单的构造函数并支持两阶段初始化,或者
  • 做一些完全不同的事情。也许Composition Over Inheritance对您的用例来说是个好建议。

关于c++ - 如何在子类构造函数中调用父构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66051940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com