1 //被注释掉的代码都是运行会报错的 2 3 #include<iostream> 4 using namespace std; 5 class A{ 6 public: 7 A(){}//这个地方一定要有default constructor,否则报错 8 A(int v,double d,int t1,double t2):value(v),data(d),test1(t1),test2(t2){ 9 //empty 10 } 11 void print(){ 12 cout<<test1<<endl<<test2<<endl<<value<<endl<<data<<endl; 13 } 14 void access(A a){ 15 cout<<a.value<<endl; 16 } 17 /*void access(B b){ 18 cout<<b.value<<endl; 19 }*///不可以在base class来访问derived class,何况这还是个private的 20 int test1; 21 double test2; 22 private: 23 int value; 24 double data; 25 }; 26 27 class B:public A{ 28 public: 29 B(int v,double d){ 30 /*data=d;// 31 value=v;*///private的限制对于derived class已然有作用 32 test1=v; 33 test2=d; 34 another=v; 35 } 36 /*void access(A a){ 37 cout<<a.value<<endl; 38 }*///不可以通过base class来访问derived class 39 void accessB(B b){ 40 cout<<b.another<<endl;//这个地方如果写为b.value试图来访问B的baseclass的private,是会报错的,access specifier对于继承依然有相同的限制作用,一个class只能在自己的member中访问自己 41 } 42 //注意 43 /*void accessA(const A& a){ 44 cout<<a.value<<endl; 45 }*///derived class的member也是不可以访问base class的private的,第45行可以那样访问是因为derived class调用了baseclass的public函数来访问到了 46 /*void print(){ 47 cout<<value<<endl; 48 } *///虽然derived class继承了baseclass的所有member,但是对于private只是继承了,还是不能用、不能访问!! 49 private: 50 int another; 51 }; 52 53 /*class C{ 54 public: 55 void access(A a){ 56 cout<<a.value<<endl; 57 } 58 private: 59 int num; 60 };*/ 61 /*class D:public B{ 62 private: 63 int val; 64 };*/ 65 66 int main(){ 67 A a1(1,1.1,2,2.2),a2(3,3.3,4,4.4); 68 a2.access(a1);//同一类型的不同objects之间可以互相访问 69 70 B b1(5,5.5); 71 b1.access(a1);//测derived class的还是需要通过baseclass的接口来访问private 72 73 /*A a3(6,6.6,7,7.7); 74 a3.accessB(b1);*/ 75 /*C c1; 76 c1.access(a1);*///不同class的object之间不能访问,class是各自封装好的 77 }