c++继承访问控制
来源:互联网 发布:c语言中 p 编辑:程序博客网 时间:2024/06/05 04:02
访问控制方式这里有篇很好的文章,其实内容也是总结c++primer上的内容
现在就按照这篇的文章举例进行学习.
思路
不同继承方式的影响主要体现在:
1、派生类成员对基类成员的访问控制。
2、派生类对象对基类成员的访问控制
三种继承方式
公有继承(public)
所有public和protected成员在派生类中的访问方式不变,但是私有成员(private)不能访问
1) 通过派生类的成员函数能够访问基类的public和protected成员,但是不能访问基类的成员.
2) 通过派生类的对象能够只能访问基类中的public成员.
举例说明
class A { public : int a = 0; protected: int b = 0; private: int c = 0;}class B:public A{ public: void test1(){ cout }}class A { public : int a = 0; protected: int b = 0; private: int c = 0;};class B:public A{ public: void test1(){ cout<<"visit public a "<< a<<endl; } void test2(){ cout << "visit protected "<< b <<endl; } void test3(){ // cout << "visit private "<< c <<endl; 违反第1)条 报错 }};int main(){ B b; b.test1(); b.test2(); //b.test3(); cout << b.a<<endl;// cout << b.b<<endl; 违反第2)条 报错// cout << b.c<<endl; 违反第3)条 报错 return 0;}
私有继承(private)
基类中的成员都以private的身份出现在派生类当中,派生类中的成员不能访问父类的private成员
1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员
2)通过派生类的对象不能访问基类中的任何成员。
如果将上边的代码改成B私有继承A.新增一条报错语句 cout << b.a <
保护继承(protected)
基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问。
1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。
2)通过派生类的对象不能访问基类中的任何成员。
它的报错情况同private.其实在垂直访问上procted与public相同,对类对象的用户来说,它又和private相同.即实现了代码重用的同时还限定了用户的访问权限.为了说明问题我们再加一个类:
class C: protected B{ public: void test2(){ cout << "visited b in C"<< b<<endl; } };
如果有:
C c;
c.b肯定报错,但是C中test2()函数不会报错,可以访问b,因为b的protect属性被传递过来了.但是如果B私有继承A的话,b就不会传递过来.代码重用性就不好了.
当然还有一些其他有待研究的遗留问题,比如友元在访问控制中有什么作用呢,会不会被继承.六大函数在继承中又扮演着什么角色.留待以后继续研究.如要深究,请仔细阅读c++ primer P549的内容继续学习.
- 【c/c++】继承的访问控制
- 继承成员访问控制机制(C++)
- php继承访问控制
- 继承访问控制
- 访问控制与继承
- 继承 访问控制
- 访问控制与继承
- 继承及访问控制
- 访问控制与继承
- c++继承访问控制
- c++继承,访问控制
- 继承的访问控制
- 【足迹C++primer】53、访问控制和继承
- 第3.1节:访问控制与继承(C++)
- 消息,继承,多态,访问控制
- 继承成员访问控制机制
- C++访问控制和继承
- C++访问控制与继承
- java文件相关工具
- Hibernate(四)一对多映射
- 算法的时间复杂度和空间复杂度-总结
- 第一天@进程
- ipython notebook 整合spark
- c++继承访问控制
- SpringBoot集成篇(二) 异步调用Async
- 关于malloc,realloc和free函数的讲解
- splay区间翻转bzoj 3223(tyvj 1729)文艺平衡树题解
- Hadoop日志格式
- Maven本地jar引用
- Node Joining Process in 6LoWPAN
- 多线程中的wait()和notify()
- java基础篇(十五)——final