新get一个C++访问权限使用的方法

我们都知道,类的成员访问控制分为三种权限: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成员是可以在类空间里面访问的,这里是建立在类空间里面所有一切都是可控的,作者不会做出出轨的动作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值