继承时objects的访问测试

 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 }

 

上一篇:六、SpringBoot—Thymeleaf使用


下一篇:orm的增删改查