派生值或附加属性的方法

Methods deriving values or additional attributes?

本文关键字:属性 方法 派生      更新时间:2023-10-16

假设我有一个类A,它具有用户定义的enum类型的数据成员info
info通过在info上使用switch,可以推断出使用类A时需要的许多信息。例如,我可能想要获得infostring版本、更通用的short_info(几个info值被分组在同一个short_info值下(等。

以下是我可以想象的两种方法,根据我对它们各自优点和缺点的理解:

  1. A中创建在info上执行switch的方法
    优点:A中的数据成员较少,因此存储空间较少
    缺点:每次都必须为调用之间不变的值调用这些方法,这可能会导致执行速度变慢
  2. 创建在构造时初始化并在info更改时更新的数据成员
    优点:更快地访问值,每次调用geter时不需要额外的计算
    缺点:更多的存储空间

这两种方法中的一种通常更好吗?这取决于初始化后是否可以修改info数据成员,还是其他因素
或者有更好的方法吗?

这两种方法中的一种通常更好吗?

不是。他们看起来都有点糟糕。

或者有更好的方法吗?

是。让info的类型是一个以该数据为成员的类。

例如,代替

enum Info {
info1,
info2
};
class A {
Info info;
string info_desc() const; // switch on info
ShortInfo info_abbr() const; // another switch
};

你有

class Info {
string desc;
ShortInfo abbr;
}
Info info1 { "first info", ShortInfo::first };
Info info2 { "second info", ShortInfo::other };
class A {
Info info;
}; // Does this do anything anymore?