例4.4 保护继承的访问规则举例
来源:互联网 发布:贝克曼梁法弯沉数据 编辑:程序博客网 时间:2024/05/19 19:43
/*3.保护继承的访问规则当类的继承方式为保护继承时,基类的公有成员和保护成员被继承到派生类中都作为派生类的保护成员,派生类的其他成员可以直接访问它们,但是在类的外部,不能通过派生类的对象来访问它们。基类的私有成员不允许派生类继承,因此在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类的私有成员。表4.4总结了保护继承的访问规则。表4.4 保护继承的访问规则---------------------------------------------------------- 基类中的成员 | 私有成员 | 公有成员 | 保护成员 |----------------------------------------------------------|内部访问 | 不可访问 | 可访问 | 可访问 |访问方式| | | | ||对象访问 | 不可访问 | 不可访问 | 不可访问 |----------------------------------------------------------*/// 例4.4 保护继承的访问规则举例。#include<iostream>using namespace std;class Base{ //声明基类Base public: int z; void setx(int i){ x = i; } int getx(){ return x; } private: int x; protected: int y;};class Derived:protected Base{ //声明基类Base的保护派生类Derived public: int p; void setall(int a,int b,int c,int d,int e,int f); void show(); private: int m; protected: int n;};void Derived::setall(int a,int b,int c,int d,int e,int f){x=a; //错误,在派生类Derived中,x为不可直接访问成员 //可修改为 setx(a);y=b; //正确,y在派生类Derived中为保护成员,派生类对象能访问它z=c; //正确,z在派生类Derived中为保护成员,派生类对象能访问它m=d;n=e;p=f;}void Derived::show(){cout<<"x="<<x<<endl; //错误,在派生类Derived中,x为不可直接访问成员cout<<"x="<<getx()<<endl; //正确,函数getx在派生类Derived中为保护成员 //派生类成员函数能访问它cout<<"y="<<y<<endl; //正确,y在派生类Derived中为保护成员 //派生类成员函数能访问它cout<<"z="<<z<<endl; //正确,z在派生类Derived中为保护成员 //派生类成员函数能访问它 cout<<"m="<<m<<endl; //正确,m为派生类Derived的私有成员 //派生类成员函数能访问它cout<<"n="<<n<<endl; //正确,n为派生类derived的保护成员,派生类成员函数能访问它}int main(){Derived obj;obj.setall(1,2,3,4,5,6);obj.show();cout<<"y="<<obj.y<<endl; //错误,y为派生类Derived的保护成员,派生类对象不能访问它cout<<"p="<<obj.p<<endl; //正确,p为派生类derived的公有成员,派生类对象可以访问它return 0;}/*例中派生类Derived有基类Base保护派生出来,所以基类Base中的私有数据成员x在保护派生类Derived中是不可直接访问成员,因此派生类成员函数setall和show不能访问它。基类Base中的保护数据成员y在保护派生类Derived中仍是保护成员,因此派生类成员函数setall和show能够访问它,但是派生类Derived的对象obj不能访问它。派生类Derived的数据成员p是公有成员,所以派生类Derived的对象obj可以访问它。如果将例中派生类Derived的成员函数Derived::setall改成如下形式:void Derived:setall(int a,int b,int c,int d,int e,int f){setx(a);y=b;z=c;m=d;n=e;p=f;}并且去掉主函数main和Derived::show中的错误语句,重新编译后程序将顺利通过。修改后,本程序运行结果如下:x=1y=2z=3m=4n=5p=6*/
阅读全文
0 0
- 例4.4 保护继承的访问规则举例
- C++ 例4.1 私有继承的访问规则举例1
- 例4.3 公有继承的访问规则举例
- 4_2 私有继承的访问规则举例2
- 继承的访问控制--保护继承
- C++继承的访问规则
- 继承的访问控制_保护继承_保护继承(C++语言)
- 继承的访问控制_保护继承_保护成员的声明(C++语言)
- 对C++保护继承的访问控制进行验证
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 继承的举例
- 常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 举例1
- 常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 举例2
- C++继承与派生的访问基本规则
- 类的保护继承
- 移动端touch事件穿透解决办法
- JZOJ 1775. 合并果子2 (Standard IO)
- websocket实现聊天室应用,包括文字和图片上传
- LeetCode 461: Hamming Distance
- 井字棋
- 例4.4 保护继承的访问规则举例
- Android实现延时执行操作
- 如何在inf文件中修改pid、vid
- mysql导入大批量数据出现MySQL server has gone away的解决方法
- JS(三)
- 【微信开发】基础知识
- JSON字符串转换为Map (fastjson)
- 知识图谱与知识栈
- Holding Bin-Laden Captive!(母函数)