public protected private 用法小结

来源:互联网 发布:php fsockopen 开启 编辑:程序博客网 时间:2024/06/15 01:55

public protected private 用法小结

一、一般类的访问控制
  public: 公有的的成员:该类的对象、类的成员函数、友元可以任意访问;声明为public的成员是类的接口部分。
  protected: 保护的成员:类的成员函数、友元可以访问;
  private: 私有的成员: 类的成员函数、友元可以访问;实现封装最好把所有数据成员定义为private。
 
二、类层次结构中的访问控制
 
  派生类访问基类(用例子描述)
 
  class X{//基类
  public: int a;
  }
 
  class Y1 : public X{};
  class Y2 : protected X{}; //Y2的成员函数、友元可以转换成基类访问基类
  class Y3 : private X{}; //Y3的成员函数、友元可以转换成基类访问基类
 
  void f1(Y1 *pY1, Y2 *pY2, Y3 *pY3)
  {
          X *pX = pY1; //OK,X是公用基类
          pY1->a = 0; //OK
 
          pX = pY2;  //错误,X是保护基类
          pY2->a = 1; //Error
    
          pX = pY3;  //错误,X是私有基类
           pY3->a = 2; //Error
  }
  void Y2::f2(Y1 *pY1, Y2 *pY2, Y3 *pY3)
  {
          X *pX = pY1; //OK,X是公用基类
          pY1->a = 0; //OK
 
          pX = pY2;  //OK
          pY2->a = 1; //OK
   
          pX = pY3;  //错误,X是私有基类
          pY3->a = 2; //Error
  }
    void Y2::f3(Y1 *pY1, Y2 *pY2, Y3 *pY3)
  {
          X *pX = pY1; //OK,X是公用基类
         pY1->a = 0; //OK
 
         pX = pY2;  //错误,X是保护基类
         pY2->a = 1; //Error
   
         pX = pY3;  //OK
         pY3->a = 2; //OK
  }
三、类层次结构中成员访问类型的变化
  class X{//基类
      public: int a;
      protected: int b;
      private:  int c;
  }
 
  class Y1 : public X
  {
  void Debug()
  {
      a = 1; //public不变
      b = 2; //protected不变
      c = 3 //Error
  }
  };
  class Y2 : protected X
  {
     void Debug()
  {
      a = 1; //变化成了protected
      b = 2; //protected保持不变
      c = 3 //Error
  }
  };
  class Y3 : private X
  {
  void Debug()
  {
      a = 1; //变化成了private
      b = 2; //变化成了private
      c = 3 //Error
  }
  }; 

原创粉丝点击