如何在 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;
};