派生值或其他属性的方法?

时间:2019-11-06 09:21:18

标签: c++ oop

假设我有一个类A和一个数据成员info,该成员是用户定义的enum类型。
info使我可以通过在A上使用switch来推断出在使用类info时需要的许多信息。例如,我可能想获得string的{​​{1}}版本,更通用的info(将几个short_info值分组在相同的info值下)等

这是我可以想象的两种方法,我了解它们各自的优缺点:

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

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

1 个答案:

答案 0 :(得分:1)

  

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

不是。他们俩似乎都不好。

  

或者有更好的方法吗?

是的。将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?