条款21:必须返回对象时,别妄想返回其reference
当函数要返回一个对象时,不要返回pointer或者reference指向local stack对象,会返回一个未定义的pointer或reference;也不要返回reference指向一个heap-allocated对象,会造成内存泄露;也不要返回pointer或者reference指向local static对象,在需要多个对象时会造成对象被覆盖而丢失原来的数据。总之,在返回对象时就直接一个新对象(pass by value)。
条款22:将成员变量声明为private
为什么采用private的原因:1、语法一致性:客户访问class成员时不需要记住是否该使用小括号;2、访问控制:使用函数可以让你对成员变量的处理有更精确的控制:可以控制他的读写性;3、封装性:将成员变量隐藏在函数接口的后面,可以为“所有可能的实现”提供弹性,确保class的约束条件总是会获得维护并且保留了日后变更实现的权利。
protected满足“语法一致性”和“访问控制”,但是并不比public更具有封装性。(封装性与“其内容改变时可能造成的代码破坏量”成反比,所谓改变也许是从class中移除它)
public,protected,private的访问范围:private:该类中的函数,其友元函数;protected:该类中的函数,子类中的函数,友元函数(不能被该类的对象访问);public:该类中的函数,子类的函数,友元函数,该类的对象;
类继承后方法属性的变化:private属性不能被继承。
使用private继承,父类的protected和public在子类中变为private。
使用protected继承,父类的protected和public在子类中变为protected。
使用protected继承,父类的protected和public在子类中不变。