首页 > 解决方案 > 如何制作静态“多态”成员变量

问题描述

基本上我在这里要做的是为每个派生类型的Shape创建一个ID。(Square 是 1,Circle 是 2,等等。)如何制作具有多态功能的静态成员变量?我将如何创建 getter 和 setter?

class Shape {
public:
    Shape() {}
    static int ID;
};

class Square : public Shape {
public:
    Square() {}

};

class Circle : public Shape {
public:
    Circle() {}

};

class Person {
public:
    int shape_type_ID
    Shape* ptr;
    Person(){}
};

int Shape::var{ 5 };

这是这个问题的副本吗? 如何以多态方式初始化`static`成员

编辑:在我当前的设计中, Person 的每个实例都包含一个指向某个 Shape 对象的指针(我不确定指针的类型)。我想将每个 Person 对象限制为只能引用一种派生类型的 Shape。

例如,第 1 个人的指针只能引用圆形,第 2 个人的指针只能引用正方形,第 3 个人的指针只能引用三角形。

但我想要 1 个带有 1 种指针类型的单个 Person 类(可能是 Shape )。理论上应该是可以的。问题之一是 Person 对象的数量应该与 Shape 派生类型一样多(一个用于 Square,一个用于 Circle,一个用于 Triangle)。我怎么知道要制作多少个 Person 对象?

标签: c++

解决方案


当你想要多态性时,你应该使用virtual方法,而不是static成员。

class Shape {
public:
    virtual int ID(){ return 0; }
    virtual ~Shape(){}
};

class Square : public Shape {
public:
    virtual int ID() override { return 1;}
};

class Circle : public Shape {
public:
    virtual int ID() override { return 2; }
};

推荐阅读