如何为基类构造函数中的每个子类执行特定任务
How to perform specific tasks for each subclass in the base class constructor
我有一个基类。例如:
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
}
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- 使用哪种模式来执行新代码,只需添加基类的新子类?
- 检查子类是否执行了方法重写
- 如何使用weak_ptr强制执行单一所有权?(或者,如何子类化shared_ptr并覆盖dtor)
- 在C++QObject子类中调用析构函数之前执行操作
- 如何在基类的子类中强制执行私有构造函数
- 调用一个方法在C多个类数组的子,执行父一个
- 告诉子类对超类的受保护变量执行某些操作是否是一种好的做法(也许是一些已知的设计模式?)?