【发布时间】:2020-09-29 22:22:32
【问题描述】:
我有这个类来存储固定的已知数据。每个对象都应该有自己的唯一 ID,这样,当用户调用 Belt belt(1) 时,会创建一个具有正确值 name、perimeter、nOfPoints 的对象。有没有更好的方法来定义这些其他参数而不使用 switch-case?我应该以另一种方式设计吗?这种实现有什么缺点?
class Belt {
private:
int _id;
std::string _name;
int _perimeter;
int _nOfPoints;
public:
Belt(int id){
_id = id;
switch (id)
{
case 1:
_name = "NEO";
_perimeter = 100;
_nOfPoints = 10;
break;
case 2:
_name = "PED";
_perimeter = 200;
_nOfPoints = 12;
break;
case 3:
_name = "ADT";
_perimeter = 400;
_nOfPoints = 20;
break;
}
}
};
【问题讨论】:
-
为什么不用正确的值创建
static const Belts? -
@Stephen Neweell 怎么样?通过声明静态常量结构?如果这个 Belt 类应该有数据操作的方法呢?
-
std::map的替代方法是创建一个包含 ID 和腰带对象的结构的 const 数组。这消除了运行时初始化的需要(std::map需要运行时初始化)。 “表”可以放在一个常量内存段中,直接访问。 -
您可以使用 Belt 对象数组。如果你这样做了,你可以使用
Belt x = belts[1];创建一个对象,或者如果你希望数组成为类的私有成员并将一个整数传递给构造函数,那么onlinegdb.com/H1yai4b8v
标签: c++ class dictionary oop