Effective C++ 条款22 将成员变量声明为private

1. 设计类时,应该将成员变量声明为private,尽量避免用户对成员变量的直接访问,使用户只能通过函数接口访问成员,这样利于实现封装,特别是当类需要改变(添加或减少成员变量)时,只需要改变接口实现,对于用户来说只需要重新编译即可(否则类的用户需要修改大量对成员变量进行访问的代码)

2. protect并不比private更具封装性,特别是涉及到继承时,因此访问权限根据封装新只有两种:private和其他.

时间: 2024-08-02 08:55:08

Effective C++ 条款22 将成员变量声明为private的相关文章

Effective C++:条款22:将成员变量声明为private

(一)为什么不采用public成员变量 (1)首先,从语法一致性考虑,客户唯一能访问对象的方法就是通过成员函数,客户不必考虑是否该记住使用小括号(). (2)其次,使用函数可以让我们对成员变量的处理有更精确的控制.如果我们令成员变量为public,那么每个人都可以读写它! 但如果我们以函数取得或设定其值,我们就可以实现出"不准访问"."只读访问"以及"读写访问",我们甚至可以实现"惟写访问". class AccessLeve

条款22:将成员变量声明为private

protected成员变量的封装性并非高于public变量. 如果有个public的成员变量,一旦其需要改变,那么所有使用它的代码都需要改变. 如果有个protected的成员变量,一点其需要改变,那么所有的继承自他的derived class都需要重新改变.这与上面孰轻孰重其实不重要 所以说,往往只有两种封装性质,private或者是不封装 小结: 切记将成员变量声明为private protected并不比public更具有封装性

读书笔记_Effective_C++_条款二十二:将成员变量声明为private

1.格式统一 在调用的时候,不会去想有没有(),一律是有get(),或者set()之类的. 2.封装 能直接访问得越少,表明封装性越高, 封装性越高,我们的顾虑就少了, 例如:我们a.data*0.9的时候,不需要调用出来*0.9.只需用public的get()来调用在修改一下就好了 为什么不使用protected 在没有继承下的class下protected和private是一样的 但在发生了继承的情况下,原来只能用父类函数调用的数据,因为protected,完全暴露了出来. 而且,用了pri

Effective C++ 条款22

将成员变量声明为private 本节条款,作者花了很大的篇幅去介绍,可是我感觉就学到一句话. 那就是注意程序的封装性. 程序的封装性起到什么作用? 很明显是保护数据操作的安全性以及增强以后程序的可维护性. 将类的数据成员声明为private的,可以保护数据不被随便修改.大家都明白权限等级就是安全等级. 至于程序的可维护性,就是用良好的函数接口代替直接的数据成员的操作,这样不但编写的时候方便,而且在修改程序计算过程的时候,只需要修改函数接口内部程序,而且不需要全部重新编译.

C++11类内static成员变量声明与定义

众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因此,就引出了static成员变量的声明与定义问题: 1. 如果一个类内成员变量是static的,且需要将之设定为常量(const),那么这个变量声明与初始化均可写在头文件内. 举个例子: 1 // Scanner.hpp 2 class Scanner { 3 public: 4 const sta

成员变量声明类型注意:

@public : 在任何地方都能直接访问对象的成员变量  @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private,即使声明为@public,若处在单独文件中也是@private)  @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)  @package : 只要处在同一个框架中,就能直接访问对象的成员变量  @interface和@implementation中不能

成员变量声明时初始化和构造方法中初始化的区别

声明时为成员变量赋值,那么你一创建对象,这个赋值就进行,而且先于构造器执行. 而且你每次创建这个类的对象,都是同一个值. 构造方法初始化可以单独为每一个对象赋不同的值 执行顺序:执行父类静态代码 执行子类静态代码初始化父类成员变量(我们常说的赋值语句)初始化父类构造函数初始化子类成员变量初始化子类构造函数

Effective C++ 条款39 明智而审慎地使用private继承

1. public继承表明is-a的关系,要求接口的完全继承,而private继承表明"根据某物实现出的关系",要求仅仅继承实现,private继承有两个规则: 1). 经由private继承而来的基类的所有成员在派生类中都会变成private属性 2). 由于1),编译器不允许将派生类转为基类以防止对派生类private成员的非法访问. 2. 由条款38,private继承和复合具有相同作用——"根据某物实现出".两者之间,要尽可能使用复合,除非必要情况.必要情况

More Effective C++ 条款22 考虑以操作符复合形式(op=)取代其独身形式(op)

1. 一般来说,重载了算数操作符(以下称"独身形式"),那么也就要重载复合赋值操作符(以下称"复合形式").要确保操作符的复合形式例如(operator+=)和独身形式(例如operator+)行为相一致,基于前者实现后者是一个好方法.例如: class Rational{ public: Rational operator+=(const Rational&); ... } Rational operator+(const T&lhs,const