C++中派生类的访问控制
来源:互联网 发布:深圳冰川网络 张雄 编辑:程序博客网 时间:2024/06/07 14:13
派生类访问其成员的权限会受到俩个因素的影响:一是在基类中该成员的访问说明符,二是派生类的派生列表中访问说明符
在介绍各种继承方式之前,首先介绍以下不常见的protected说明符,我们可以把protected看作是一个public,private中和后的产物
protected的具体规则如下
(1)和私有成员类似,受保护成员对于类的用户来说是不可访问的(但是可以被类的成员函数或友元访问)
(2)和公有成员类似,受保护成员对于派生类的成员或友元是可访问的(派生类的对象是不可访问的)
(3)派生类只能通过自己的成员函数调用自己的对象来访问它的protected而不能通过自己的成员函数通过调用基类的对象来访问它
1.公有继承
派生类的派生列表为public它的具体特性如下
(1)派生类对象只能直接访问从基类继承过来的public成员
(2)派生类的成员函数可以直接访问从基类继承过来的public和protected成员
(3)派生类从基类基类继承过来的成员函数可以直接访问从积累继承过来的private成员
具体实例如下
#include<iostream>using namespace std;class Base{ public: int a1; Base(int i,int j,int k):a1(i),a2(j),a3(k) { } void print1(void) { //继承类继承自基类的函数可以访问a2也可以访问a3 cout<<"base a2:"<<a2<<endl; cout<<"base a3:"<<a3<<endl; } protected: int a2; private: int a3;};class Derived:public Base{ public: Derived(int i,int j,int k):Base(i,j,k) { } void print2(void) { //继承类自身的成员函数可以访问a2 cout<<"derived a2:"<<a2<<endl; //继承类自身的成员函数不可以访问a3 //cout<<"derived a3:"<<a3; }};int main(void){ Base test1(0,0,0); Derived test2(1,2,3); //继承类对象可以直接访问a1 cout<<"继承类对象 a1:"<<test2.a1<<endl; //继承类对象不能直接访问a2和a3 //cout<<" a2:"<<test2.a2<<endl; //cout<<"a3:"<<test2.a3<<endl; test2.print1(); test2.print2(); //继承类和积累的大小相同 cout<<"a:"<<sizeof(test1)<<endl; cout<<"b:"<<sizeof(test2)<<endl; return 0;}
公有继承将会是我们今后最长遇到的
2.私有继承
私有继承基本和公有继承差不多,唯一的差异就是,public继承继承自基类的public部分在继承类中依然是公有的,而private则变为私有的了
具体实例如下
#include<iostream>using namespace std;class Base{ public: int a1; Base(int i,int j,int k):a1(i),a2(j),a3(k) { } void print1(void) { //继承类继承自基类的函数可以访问a1,a2,a3 cout<<"base a1:"<<a1<<endl; cout<<"base a2:"<<a2<<endl; cout<<"base a3:"<<a3<<endl; } protected: int a2; private: int a3;};class Derived:private Base{ public: Derived(int i,int j,int k):Base(i,j,k) { } void print2(void) { print1(); //继承类自身的成员函数可以访问a1,a2 cout<<"derived a1:"<<a1<<endl; cout<<"derived a2:"<<a2<<endl; //继承类自身的成员函数不可以访问a3 //cout<<"derived a3:"<<a3; }};int main(void){ Base test1(0,0,0); Derived test2(1,2,3); //继承类对象不可以直接访问a1,a2,a3 cout<<"a1:"<<test2.a1<<endl; cout<<"a2:"<<test2.a2<<endl; cout<<"a3:"<<test2.a3<<endl; test2.print2(); //继承类和积累的大小相同 cout<<"a:"<<sizeof(test1)<<endl; cout<<"b:"<<sizeof(test2)<<endl; return 0;}
3.保护继承
保护继承与public继承也基本相似,唯一的区别就是。protected继承自基类中public,protected的成员在继承类中都是protected的。此处就不给读者例子了,留给读者自己去模仿前俩个例子探索把^_^
0 0
- [c++]派生类的访问控制
- C++中派生类的访问控制
- 派生类的访问控制
- 派生类的三种访问控制
- C++中派生类和基类的转换和访问控制
- C++ virtual 与"基类"和"派生类"的访问控制
- C++类的继承和派生,访问控制
- 继承与派生:派生类对基类成员的访问控制之公有继承
- 三十七、继承与派生:派生类对基类成员的访问控制之公有继承
- C++类访问控制与派生
- 派生类的访问控制-“三看”原则-派生类类成员访问级别设置的原则
- 在继承中派生类成员的访问权限测试
- C++中派生类成员的访问属性
- 派生类成员的访问
- 派生类成员的访问
- 继承中访问控制:派生类public、protected、private继承基类
- 继承与派生:派生类对基类成员的访问控制之保护继承与私有继承
- 三十八、继承与派生:派生类对基类成员的访问控制之保护继承与私有继承
- iOS开发--Advanced NSOperations
- android webview 缩放及换行 及其webview 进度条
- hibernate3第六章之性能优化相关几个问题_1
- mysql导入数据
- 映射公网(花生壳、PubYun、No-IP、DynDNS、Ngrok、Tunnel、localtunnel、pagekite)
- C++中派生类的访问控制
- NSLog打印格式控制
- 数据结构学习笔记 C++版 (一)
- RAGE的megatexture介绍
- python_面向对象
- log4j的配置
- 让mysql数据库允许被远程连接访问
- 欢迎使用CSDN-markdown编辑器
- js javascript:void(0) 真正含义