我有一个基础课。例如:
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
...
}
};
我想知道如何在基类中为子类执行一些任务。
答案 0 :(得分:1)
问题是您从构造函数调用了虚函数-应该避免使用它。相反,您需要在基类中添加一个函数,该函数将调用您的虚函数,最终将导致调用子类的重写函数。 因此,我将通过以下方式更改您的基类:
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;
};
答案 1 :(得分:0)
在基类中创建不同的构造函数,然后在子类中调用适当的构造函数。或使用适当更改的默认参数。
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
}