相关疑难解决方法(0)

c ++ const公共字段与getter方法

我想在某个类的每个对象中添加唯一ID(在单个会话中).一种解决方案是使用工厂函数来增加一些静态计数器.一个更简单的解决方案是将此计数器添加到类本身,例如:

class fooWithUniqueId {
public:
    fooWithUniqueId() : id(next_id++) {...};        
    long id;

private:
    static long next_id = 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,一个缺陷是该id领域是公开的,并且可以由呼叫者改变,从而违反其独特性.传统的(好吧,至少在我看来)是id私有,并使用getter函数来访问它,因此:

class fooWithUniqueId {
public:
    fooWithUniqueId() : id(next_id++) {...};                
    long getId() const { return id; };

private:
    long id;
    static long next_id = 0;
}
Run Code Online (Sandbox Code Playgroud)

但我正在考虑采用不同的方法.我可以将id设为const公共类字段:

class fooWithUniqueId {
public:
    fooWithUniqueId() : id(next_id++) {...};                
    const long id;

private:
    static long next_id = 0;
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种方式,因为getId()每次我需要id时都不需要继续调用,我可以将id用作映射中的键(因为复制构造正确初始化了复制对象的id).我能想到的一个缺点是我不能在fooWithUniqueId对象之间实现赋值,尽管目前我不需要这个功能.

  • 每种方法的优缺点是什么(getter function/const field)?
  • 假设我正在使用'const'方法,有没有办法在不破坏代码的情况下实现赋值运算符?

谢谢,波阿斯

c++ getter field const

7
推荐指数
2
解决办法
4913
查看次数

标签 统计

c++ ×1

const ×1

field ×1

getter ×1