c++ - 如何制作静态“多态”成员变量
问题描述
基本上我在这里要做的是为每个派生类型的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 对象?
解决方案
当你想要多态性时,你应该使用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; }
};
推荐阅读
- python - 在具有 NaN 值的 pandas 数据帧上操作时精度损失
- apache-kafka - Debezium Kafka 连接错误 - TimeoutException:获取主题元数据时超时
- ios - 如何在 iOS 上测试 Firebase 无密码登录?
- python - 如何在 matplotlib 中使用不同的 xlimit 和轴 x 的大小制作子图?
- javascript - 无法在 python 上使用 requests-html 库运行 JavaScript
- javascript - 每次单击下一个输入时反应输入都会翻转
- javascript - 错误:这可能不是 npm 的问题。这可能是上面的附加日志输出
- c++ - sqrt 函数导致“'void*'不是指向对象类型的指针”错误
- regex - 如何查找不以指定字符结尾的子字符串的第一次出现
- c# - 从 C# WPF 中的属性设置器异步自动保存