首页 > 代码库 > 对private protected public的详解:
对private protected public的详解:
1 #include <iostream> 2 #include <stack> 3 #include <queue> 4 #include <exception> 5 #include <sstream> 6 #include <string> 7 #include <vector> 8 #include<list> 9 #include<cassert> 10 #include<cstdlib> 11 using namespace std; 12 13 14 class A{ 15 private: 16 int AprivateVar; 17 void Apirvate() 18 { 19 cout<<"A:Aprivate()"<<endl; 20 } 21 protected: 22 int AprotectedVar; 23 void Aprotected() 24 { 25 cout<<"A:Aprotected()"<<endl; 26 } 27 public: 28 int ApublicVar; 29 void Apublic() 30 { 31 cout<<"A:Apublic()"<<endl; 32 } 33 34 void Test() 35 { 36 AprivateVar=1; 37 Apirvate(); 38 AprotectedVar=1; 39 Aprotected(); 40 ApublicVar=1; 41 Apublic(); 42 } 43 }; 44 45 class Bprivate:private A 46 { 47 public: 48 void test() 49 { 50 //访问基类private成员 51 // AprivateVar=1;//这里因为子类声明的是private故不可访问 52 // Apirvate();//这里因为子类声明的是private故不可访问 53 54 AprotectedVar=1; 55 Aprotected(); 56 57 ApublicVar=1; 58 Apublic(); 59 } 60 }; 61 62 class Cprivate:public Bprivate 63 { 64 public: 65 void test() 66 { 67 //此处全都不能访问 68 //在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,并且不能这个子类的派生类所访问. 69 /*AprivateVar=1;/ 70 Apirvate();/ 71 72 AprotectedVar=1; 73 Aprotected(); 74 75 ApublicVar=1; 76 Apublic();*/ 77 } 78 }; 79 80 class Bprotected:protected A 81 { 82 public: 83 void test() 84 { 85 //访问基类private成员 86 //AprivateVar=1;//这里因为子类声明的是private故不可访问 87 //Apirvate();//这里因为子类声明的是private故不可访问 88 89 AprotectedVar=1; 90 Aprotected(); 91 92 ApublicVar=1; 93 Apublic(); 94 } 95 }; 96 97 98 class Bpublic:public A 99 {100 public:101 void test()102 {103 //AprivateVar=1;//子类不能访问基类中的private成员104 //Apirvate();//子类不能访问基类中的private成员105 106 AprotectedVar=1;//子类可以访问基类中的protected成员107 Aprotected();//子类可以访问基类中的protected成员108 109 ApublicVar=1;//子类可以访问基类中的public成员110 Apublic();//子类可以访问基类中的public成员111 }112 };113 114 int main(int argc,char* argv[])115 {116 A testA;117 // testA.Apirvate();//实例的私有方法不能访问118 // testA.Aprotected();//实例的受保护方法不能访问119 testA.Apublic();120 121 Bprivate testB;122 //testB.Apirvate();//实例的私有方法不能访问123 // testB.Aprotected();//实例的受保护方法不能访问124 //testB.Apublic();//因为是private继承的.所以.实例对象不能访问私有方法125 126 Bprotected testB2;127 //testB2.Apirvate();//实例的私有方法不能访问128 //testB2.Aprotected();//实例的受保护方法不能访问129 //testB2.Apublic();//实例的受保护方法不能访问130 131 Bpublic testB3;132 //testB3.Apirvate();//子类的实例对象.只能访问基类的public成员.133 //testB3.Aprotected();//子类的实例对象.只能访问基类的public成员.134 testB3.Apublic();//子类的实例对象.只能访问基类的public成员.135 return 0;136 }137 138 /*139 总结一下:140 基类的实例对象,在这里和普通类是一样的,只能访问类的public成员方法和public成员变量;也就是public成员可见,protected和private是不可见的;141 1.Public继承:基类的public成员和protected成员对子类是可见的.继承以后public和protected都保持原有的状态.private是不可见的.也就是说子类142 中不能访问基类中的private成员,143 子类的实例对象.只能访问基类的public成员.以及自身的public成员.144 所以:在public继承时,子类的实例对象可以访问基类中的public成员.而子类中的成员方法可以访问基类中的public和protected成员.145 2.Private继承:基类的实例对象,可以访问基类的public成员(和普通类一样).146 在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,这些public和protected成员不能被这个子类的派生类所访问.147 基类的私有成员是不可见的,也就是说子类不能访问基类中的私有成员.148 子类的实例对象,不能访问基类的所有成员.私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承.149 3.protected继承:子类中可以访问基类的public成员和protected成员,基类的public和protected成员都变成protected成员,并且不能被这个派生类的子类所访问,基类的私有成员150 是不可见的,派生类不能访问基类中的私有成员.在protected继承时,基类的成员也只能由直接派生类访问,不能在往下继承.151 152 */
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。