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

来源:互联网 发布:政府网站域名 编辑:程序博客网 时间:2024/05/22 09:00

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时,将返回同一个静态对象的地址。

原创粉丝点击