访问控制:protected 之 单元素模式设计

protected
     在类外只能用公有类成员来访问protected部分中的类成员。而派生类的成员可以直接访问基类的protected成员。因此,对于外部世界来说,protected保护成员的行为与私有成员相似;但对于派生类来说,保护成员的行为与公有成员相似。

 

(最好对类数据成员采用私有访问控制,而不要使用保护访问控制)

 

单设计模式

     例如,希望有且只有一个类的实例返回给调用程序时,就可以使用单元素模式(Singleton pattern)。这种类的声明如下:

 

class class_a
{

 public:
   static class_a* gti();
   ...
 protected:
   class_a(){};
 private:
   ... 
};

 

通过将构造函数声明为保护,并省略公有构造函数,可以防止局部实例被创建:

int main(){class_a noCanDo; //not allowed

 

只能通过公有静态方法gti()来访问类。该方法被调用时,将返回类class_a的实例:
class_a* class_a::gti()
{
  static class_a CanDo;
  return &CanDo;
}

 

    gti()方法仅在第一次被调用时,创建class_a类的一个实例。以这种方式构造的静态对象一直有效,直到程序终止,此时这种静态对象将自动被释放。

 

要检索指向这个类的唯一一个实例的指针,只需要调用静态方法gti(),该方法返回单对象的地址:

class_a* pclass_a = class_a::git();

 

因为静态变量在函数调用结束后仍保存在内存中,所以以后再调用git时,将返回同一个静态对象的地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值