【问题标题】:What is the difference between a constant member and a private member without setter?常量成员和没有 setter 的私有成员有什么区别?
【发布时间】:2018-12-23 15:22:39
【问题描述】:

假设我有一个常量成员,不同的对象对这个常量有不同的值,这个常量成员和没有setter的私有成员有什么区别?

【问题讨论】:

  • 一个没有setter的私有成员仍然可以被类内部改变,而一个const成员不能。
  • "...通过内部类"或通过friend 函数
  • 很少,主要是风格问题。但是,您可以使用公共常量来做一些您不能使用私有变量和 getter 的事情。例如,您可以获取常量的地址,或者在其上使用 sizeof。编写类(部分)是关于定义您希望使用的类的接口。这就是为什么首选吸气剂的原因。具有良好定义接口的类也更容易在以后修改。
  • 如果你上面试过了,能不能提供一个代码sn-p?你得到什么行为?我的意思是你如何为不同的实例分配不同的值给这个常量?
  • @john,实际上差别很大,正如 pablo285 在他的回答中指出的那样。只有当你的类在初始化后从不改变它的私有成员的值时,才会有一个“小”的区别,但这是一个非常极端的情况。

标签: c++ class-constants


【解决方案1】:

除了 cv 限定和可访问性是两个完全不同的概念之外,对于 const 公共成员与私有非 const 成员也有实际意义。

  • 无法在其对象之外访问私有成员,因此如果您想这样做,您必须创建一个公共方法(getter)
  • 私有非常量成员是可变的,即在同一个类中定义的方法可以改变它
  • const 成员一旦初始化就无法更改

这一切都取决于你想做什么。

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2011-10-15
    • 2021-10-22
    • 2021-11-03
    • 2019-12-29
    相关资源
    最近更新 更多