如何在 base class 构造函数中为每个 subclass 执行特定任务
How to perform specific tasks for each subclass in the base class constructor
我有一个基地class。例如:
class CData{
public:
CData(const std::string &_filename)
{
m_filename = _filename;
// LodaData(); // wrong
}
virtual void LoadData() = 0;
private:
std::string m_filename;
};
还有一个子class:
class COtherData: public CData{
public:
COtherData(const std::string &_filename): CData(_filename) {}
virtual void LoadData() {
// some code to load data
...
}
};
我想知道如何在基础 class 中为 subclasses 执行一些任务。
在基class中创建不同的构造函数,然后在子class中调用适当的构造函数。或者使用适当更改的默认参数。
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
}
问题是您从构造函数调用虚函数 - 您应该避免它。相反,您需要向基础 class 添加一个函数来调用您的虚函数,最终调用子 class 的重写函数。
因此,我将按以下方式更改您的基础 class:
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。例如:
class CData{
public:
CData(const std::string &_filename)
{
m_filename = _filename;
// LodaData(); // wrong
}
virtual void LoadData() = 0;
private:
std::string m_filename;
};
还有一个子class:
class COtherData: public CData{
public:
COtherData(const std::string &_filename): CData(_filename) {}
virtual void LoadData() {
// some code to load data
...
}
};
我想知道如何在基础 class 中为 subclasses 执行一些任务。
在基class中创建不同的构造函数,然后在子class中调用适当的构造函数。或者使用适当更改的默认参数。
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
}
问题是您从构造函数调用虚函数 - 您应该避免它。相反,您需要向基础 class 添加一个函数来调用您的虚函数,最终调用子 class 的重写函数。 因此,我将按以下方式更改您的基础 class:
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;
};