c++ - 如何更改初始化的变量取决于虚函数

标签 c++ oop design-patterns polymorphism

class Base{
protected:
    int remainItems = 0;
public:
    Base(){}
    virtual int numOfItem() = 0;
};
class Deveried1 : public Base{
public: 
    Deveried1() :Base(){ remainItems = numOfItem(); }
    int numOfItem(){
        return 5;
    }
};
class Deveried2 : public Base{
public:
    Deveried2() :Base(){ remainItems = numOfItem(); }
    int numOfItem(){
        return 10;
    }
};
class Deveried3 : public Base{
public:
    Deveried3() :Base(){ remainItems = numOfItem(); }
    int numOfItem(){
        return 10;
    }
};
int main(){
    Base* foo = new Deveried3;
}

通过这种设计,对于每个派生的类,我必须在构造函数中做同样的事情来初始化 remainItems。我想知道在这种情况下是否有更好的方法/模式。

最佳答案

确实,你不能从基类的构造函数中调用派生类的函数,所以这种扭曲的依赖倒置是行不通的。我会将值传递给基类构造函数:

Base(int numOfItems) : remainItems(nomOfItems) {}
Derived1() : Base(5) {}
Derived2() : Base(10) {}

关于c++ - 如何更改初始化的变量取决于虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27458302/

相关文章:

c++ - OpenCV 3.1.0 : Save and load trained SVMs

c++ - QT-Dbus 信号/插槽?

java - protected 字段与 protected 方法与操作处理程序的实现接口(interface)

java - 当子对象状态影响父状态时处理它

java - 使用还是不使用DTO?

c++ - OpenGL 文本随相机移动,纹理也表现出与专家建议相同的方式

c++ - 使用 memset 初始化结构

C++ 从 int* 到 int 的无效转换

oop - UML 中关联关系的困惑

java - 使用比较器根据 ArrayList 对数组进行排序