常量成员和没有 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