如何为基类构造函数中的每个子类执行特定任务

How to perform specific tasks for each subclass in the base class constructor

本文关键字:子类 执行 任务 基类 构造函数      更新时间:2023-10-16

我有一个基类。例如:

class CData{
public:
CData(const std::string &_filename)
{
m_filename = _filename;
// LodaData(); // wrong
}
virtual void LoadData() = 0;
private:
std::string m_filename;
};

并且,一个子类:

class COtherData: public CData{
public:
COtherData(const std::string &_filename): CData(_filename) {}
virtual void LoadData() {
// some code to load data
...
}
};

我想知道如何在子类的基类中执行一些任务。

问题是你从构造函数调用虚函数 - 你应该避免它。相反,您需要向基类添加一个函数,该函数将调用您的虚函数,最终以调用子类的重写函数而告终。 因此,我将通过以下方式更改您的基类:

class CData
{
public:
CData(const std::string &_filename)
: m_filename(_filename)
{}
void performTask()
{
LoadData();
// ... do something else
}
virtual void LoadData() = 0;
private:
std::string m_filename;
};

在基类中创建不同的构造函数,然后在子类中调用相应的构造函数。或者使用适当更改的默认参数。

class A  
{  
A(int a = 0) 
{
if(a == 0) // first case
else // second case
}
};
class B : public A 
{
B() : A(0) {} // First case
--- or --- 
B() : A(1) {} // Second case
}