我们都知道,类的成员访问控制分为三种权限:public ,private, protected;
这三种权限对类成员或者属性的访问控制可以见连接:http://blog.csdn.net/zhangyulin54321/article/details/7677738
但是,这里有个点,我一直没有get到。 对于private属性的成员或者方法:我只知道他只能在类里面使用,不能在外直接使用。但这里的作用域指的是类里面,而不是实例里面,
有点说不清楚,举个例子,
class Fish
{
public:
int assign(Fish b) {
count_ = b.count_; //按照之前的想法,这块应该报编译错误, count_是一个private成员,是不能直接被类的对象调用,实际上,实际上,这里在类Fish的里面,b的类型也是 //Fish, 所以认为在类里面,可以直接访问private成员。
}
private:
int count_;
};
这个属性之前一直没有用过,但是实际上很有用处,在实现类似assign方法的时候,可以直接访问传入同类型对象的private函数,从而避免为各种无须对外可见的成员或者函数提供get/set接口。而且直接访问也可能比提供get/set接口效率更高。
举一个简化过的例子来说明哪些对象确实无须对外提供访问接口,但是在实现assign接口时需要用到:
class BitSet
{
private:
int bitset_word_array_[10]; //实现一个bitset, 直接用一个整形数组来存储各个bit值;
int assign(const BitSet &other);
};
一般来说,我们只需对bitset提供set_member(index), has_member(index) 的接口。 而无须对外暴露数组(内部具体实现数据结构)。但是在实现assign接口的时候:如果我们用set_member/has_member这一组接口的话,效率就会超级地下,幸好,我们可以直接访问other.bitset_word_array_ ,直接进行数组的赋值。
所以,private成员是可以在类空间里面访问的,这里是建立在类空间里面所有一切都是可控的,作者不会做出出轨的动作。