欢迎光临散文网 会员登陆 & 注册

Effective C++ 第二十二条 Declare data members private.

2023-01-22 15:35 作者:九思519  | 我要投稿

将成员变量声明为 private

        我们在声明一个类的时候,肯定也会为类设计成员变量,但是这些成员变量究竟是 public、private 还是 protected 要具体分析。

        通常来说,不要把成员变量设置为 public 和 protected ,如果把成员变量设置为 public ,看如下例子

        这样代码可以正常运行,但是我们的类不一定万年不变,也许在某一次的优化中我们的类改写成了以下这样

        那么客户的代码中的 rhs.val += 1 就会成为无效代码,如果需要实现同样功能,就要改写为 rhs.reviseVal( rhs.getVal() + 1);

        这样就会给客户代码造成极大的影响,凡是涉及到原先直接调用 Test::val 的代码全都要重写返工,这个影响可能会很大。

如果把成员变量设置为 protected ,那么就会影响继承该类的子类

代码正常运行,输出 3

但是一旦 Base 修改之后,如下

        就这么一个小小的改动,Derived 中所有关于 val 的操作全都失效。protected 继承对 Derived 的影响很大。

所以最好的方式还是采取 private 继承,不让外界和 Derived 调用成员函数,而是留出接口

        通过将成员变量设置为 private,再设置读、写接口实现控制成员变量 “可读可写”、“只读不写”、“只写不读”、“不读不写”,这样虽然有点繁琐,但是并不是所有成员变量都需要接口。这样的安全性是最强的。protected 并不是比 public 更具有封装性。

Effective C++ 第二十二条 Declare data members private.的评论 (共 条)

分享到微博请遵守国家法律