【发布时间】:2021-09-24 11:02:35
【问题描述】:
我有一个基类,我想从中继承它的构造函数,但我想在子类中为构造函数添加更多内容。具体来说,我想在构造函数的末尾运行一个函数,比如 ExtraSetup(),它会执行一些与子类相关的初始化。有什么好的方法可以做到这一点?
这是一个简化的示例。我希望子类的 ExtraSetup() 在初始化子类对象时运行。请注意,我不一定要使用此“使用 Base::Base;”和虚函数。如果有更简单的方法就更好了。
#include <iostream>
using namespace std;
class Base {
protected:
int base_number_;
virtual void ExtraSetup(){
cout << "This should NOT run" << endl;
}
public:
Base(int number){
base_number_ = number;
ExtraSetup();
}
};
class Sub : public Base {
public:
using Base::Base;
private:
int sub_number_;
void ExtraSetup(){
sub_number_ = 200; // some random extra setup
cout << "This should run" << endl;
}
};
int main()
{
Sub sub_object(100);
return 0;
}
【问题讨论】:
-
问题不清楚。请显示有问题或无法按预期方式工作的代码。
-
你问的不是继承类的自然行为吗?当您创建派生类的实例时,将首先调用基类的构造函数。所以你放在派生类的构造函数中的任何东西都会跟随它。
-
您要求的是推导的基本机制。您没有继承构造函数,而是继承了一个类,该类的构造函数需要在其初始化列表中调用它的父构造函数。 Here is an example of what you asked for
-
此外,如果 "ExtraSetup()" 应该只是进行子类成员初始化,我建议您删除此函数并改用构造函数的初始化列表,它会更高效(除非您的成员初始化不是微不足道的)。
-
编辑 - 添加代码示例。 @Fareanor 在我的真实用例中,ExtraSetup() 将 csv 文件读入一个向量(循环),它是子类成员。我想这不是微不足道的,就像直接分配一个成员一样。
标签: c++ oop constructor