c++ - 从派生类实现基类构造函数的专门化的替代方法是什么?

标签 c++ c++11 inheritance constructor polymorphism

给定以下伪代码类,我想从派生类中专门化基类的构造函数。

class Entity
{
    public:
    Entity(float mass);

    virtual float PerformCalculation();
}

class SpecializedEntity : public Entity
{
    public:
    SpecializedEntity(float mass, float diameter);

    virtual float PerformCalculation() override;
}

鉴于在两个类的构造函数中,需要从每个类的构造函数中调用PerformCalculation。在 PerformCalculation 中,我需要对我的系统进行 API 调用,它允许我指定仅出现在 SpecializedEntity 中的 diameter 参数。在基类 Entity 中,我只是传入 nullptr

在不修改PerformCalculation中大量代码的情况下,还有什么比下面的方法更好的方法呢?

class Entity
{
    public:
    Entity(float mass, bool initialize)
    {
        if (initialize) this->Initialize();
    }

    virtual void Initialize();
    virtual float PerformCalculation();
}

class SpecializedEntity : public Entity
{
    public:
    SpecializedEntity(float mass, float diameter) : diameter(diameter), Entity(mass, false)
    {
        this->Initialize();
    }

    virtual void Initialize() override;
    virtual float PerformCalculation() override;
}

最佳答案

我要为我的同事回复,因为他看到了这个并告诉我一个简单的解决方案,虽然更好,但仍然不理想。它还将有助于说明我的观点并为更好的答案留出空间。

解决方案是让所有派生类从其构造函数中调用 this->Initialize,而不是允许基类调用它,因为不应该有任何理由使用该基类。

class Entity
{
    protected:
    Entity(float mass)
    { }

    virtual void Initialize();

    public:
    virtual float PerformCalculation();
}

class SpecializedEntity : public Entity
{
    public:
    SpecializedEntity(float mass, float diameter) : Entity(mass)
    {
        this->Initialize();
    }

    virtual void PerformCalculation() override
    {
        // Do specific stuff here
    }
}

PerformCalculation 是从 Initialize 内部调用的,因此一旦从派生类调用它,它将使用更专门的 PerformCalculation

关于c++ - 从派生类实现基类构造函数的专门化的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303546/

相关文章:

C++/CX - 我需要将 Platform::String 传递到采用 const char* 的方法中?

c++ - Qt Creator 无法解析 STL 容器

c++ - 使用 Boost 构建单元测试时出现链接器错误

python - 操作来自namedtuple()派生类的属性

java - Java 中的类可以克隆吗?

C++ 程序卡在函数之间?

c++ - 将 const 对象引用传递给仿函数

c++ - 在函数、编译时或运行时创建的数组?

c++ - 如果我只想指定一个哈希函数,我应该将什么传递给 unordered_map 的存储桶计数参数?

c++ - 来自子类的虚函数调用一次父函数