三种类的访问权限与继承方式 public protected private derive

来源:互联网 发布:国内erp软件排名 编辑:程序博客网 时间:2024/05/17 06:47
首先对于非派生的情况
    类 访问 自身的公有成员、保护成员、私有成员,都是OK的。
    类对象 访问 自身的公有成员是OK的。
    类对象 访问 自身的保护成员是error的。
    类对象 访问 自身的私有成员是error的。

然后对于派生的情况
一、公有继承方式(最常用):
public基类成员保持自己public访问级别,成为派生类的public成员。
protected基类成员保持自己的protected访问级别,成为派生类的protected成员。
private基类成员依然是基类自己的private成员,派生类是无法访问的。

二、私有继承方式:
public基类成员成为派生类的private成员。
protected基类成员成为派生类的private成员。
private基类成员依然是基类自己的private成员,派生类是无法访问的。


三、保护继承方式:
public基类成员成为派生类的protected成员。
protected基类成员保持成为派生类的protected成员。
private基类成员依然是基类自己的private成员,派生类是无法访问的。


[cpp] view plaincopy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. class base{  
  5.     public:  
  6.         base():base_pub(1),base_pro(2),base_pri(3) {}  
  7.         int base_pub;  
  8.     protected:  
  9.         int base_pro;  
  10.     private:  
  11.         int base_pri;  
  12.     public:  
  13.         int use_mypub() { return base_pub; }  
  14.         int use_myro()  { return base_pro; }  
  15.         int use_mypri() { return base_pri; }  
  16. };  
  17.   
  18. class pub_derive : public base {  
  19.     public:  
  20.         int use_base_pub()  
  21.         {  
  22.             return base_pub;  
  23.         }  
  24.         int use_base_pro()  
  25.         {  
  26.             return base_pro;  
  27.         }  
  28.         int use_base_pri()  
  29.         {  
  30.             return 1;//base_pri;        //error  
  31.         }  
  32.         pub_derive():base() {}  
  33. };  
  34.   
  35. class pro_derive : protected base {  
  36.     public:  
  37.         int use_base_pub()  
  38.         {  
  39.             return base_pub;  
  40.         }  
  41.         int use_base_pro()  
  42.         {  
  43.             return base_pro;  
  44.         }  
  45.         int use_base_pri()  
  46.         {  
  47.             return 1; //base_pri;   //error  
  48.         }  
  49.         pro_derive():base() {}  
  50. };  
  51.   
  52.   
  53. class pri_derive : private base {  
  54.     public:  
  55.         int use_base_pub()  
  56.         {  
  57.             return base_pub;  
  58.         }  
  59.         int use_base_pro()  
  60.         {  
  61.             return base_pro;  
  62.         }  
  63.         int use_base_pri()  
  64.         {  
  65.             return 1 ;//base_pri;  //error  
  66.         }  
  67.         pri_derive():base() {}  
  68. };  
  69.   
  70. int main()  
  71. {  
  72.     int a;  
  73.     base b;  
  74.     pub_derive pubd;  
  75.     pri_derive prid;  
  76.     pro_derive prod;  
  77.   
  78.     //类自身的访问权限  
  79.     b.use_mypub();  //类 访问 自身的公有成员 ok  
  80.     b.use_myro();   //类 访问 自身的保护成员 ok  
  81.     b.use_mypri();  //类 访问 自身的私有成员 ok  
  82.     a = b.base_pub;     //类对象 访问 自身的公有成员 ok  
  83.     //a = b.base_pro;   //类对象 访问 自身的保护成员 error  
  84.     //a = b.base_pri;   //类对象 访问 自身的私有成员 error  
  85.   
  86.     //公有继承类的访问权限  
  87.     pubd.use_base_pub();    //公有继承类 访问 基类的公有成员 ok  
  88.     pubd.use_base_pro();    //公有继承类 访问 基类的保护成员 ok  
  89.     //pubd.use_base_pri();  //公用继承类 访问 基类的私有成员 error  
  90.     a = pubd.base_pub;          //公有继承类对象 访问 基类的公有成员 ok  
  91.     //a = pubd.base_pro;        //公有继承类对象 访问 基类的保护成员 error  
  92.     //a = pubd.base_pri;        //公有继承类对象 访问 基类的私有成员 error  
  93.       
  94.       
  95.     //保护继承类的访问权限  
  96.     prod.use_base_pub();    //保护继承类 访问 基类的公有成员 ok     
  97.     prod.use_base_pro();    //保护继承类 访问 基类的保护成员 ok  
  98.     prod.use_base_pri();    //保护继承类 访问 基类的私有成员 error  
  99.     //a = prod.base_pub;        //保护继承类对象 访问 基类的公有成员 error  
  100.     //a = prod.base_pro;        //保护继承类对象 访问 基类的保护成员 error  
  101.     //a = prod.base_pri;        //保护继承类对象 访问 基类的私有成员 error  
  102.       
  103.       
  104.     //私有继承类的访问权限  
  105.     prid.use_base_pub();    //私有继承类 访问 基类的公有成员 ok  
  106.     prid.use_base_pro();    //私有继承类 访问 基类的保护成员 ok  
  107.     prid.use_base_pri();    //私有继承类 访问 基类的私有成员 error  
  108.     //a = prid.base_pub;    // 私有继承类对象 访问 基类的公有成员 error  
  109.     //a = prid.base_pro;    // 私有继承类对象 访问 基类的保护成员 error  
  110.     //a = prid.base_pri;    // 私有继承类对象 访问 基类的私有成员 error  
  111.       
  112.   
  113.     cout<<"OK"<<endl;  
  114.     return 1;  
  115. }  
原创粉丝点击