常量成员和没有 setter 的私有成员有啥区别?

Posted

技术标签:

【中文标题】常量成员和没有 setter 的私有成员有啥区别?【英文标题】: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 在他的回答中指出的那样。只有当你的类在初始化后从不改变它的私有成员的值时,才会有一个“小”的区别,但这是一个非常极端的情况。 【参考方案1】:

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

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

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

【讨论】:

以上是关于常量成员和没有 setter 的私有成员有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

受保护和私有有啥区别? [复制]

C ++:私有结构的每个单个成员的通用getter/setter

[在C ++中没有getter setter的访问成员

c++里面的protect和public、private有啥区别?

“私有”和“受保护的内部”有啥区别?

delphi中属性与成员变量的关系,有啥区别?