继承与接口---子类的访问权限
来源:互联网 发布:软件工程技术应用 编辑:程序博客网 时间:2024/05/17 23:36
请考虑标记为A到J的语句在编译时可能出现的情况。如果能够成功编译,请记为RIGHT,否则标记为ERROR。
#include<iostream>#include<stdio.h>class Parent{public: Parent(int var=-1) { m_nPub=var; m_nPtd=var; m_nPrt=var; }public: int m_nPub;protected: int m_nPtd;private: int m_nPrt;};class Child1:public Parent{public: int GetPub(){return m_nPub;}; int GetPtd(){return m_nPtd;}; int GetPrt(){return m_nPrt;}; //A};class Child2:protected Parent{public: int GetPub(){return m_nPub;}; int GetPtd(){return m_nPtd;}; int GetPrt(){return m_nPrt;}; //B};class Child3:private Parent{public: int GetPub(){return m_nPub;}; int GetPtd(){return m_nPtd;}; int GetPrt(){return m_nPrt;}; //C};int main(){ Child1 cd1; Child2 cd2; Child3 cd3; int nVar=0; cd1.m_nPub=nVar; //D cd1.m_nPtd=nVar; //E nVar=cd1.GetPtd(); //F cd2.m_nPub=nVar; //G nVar=cd2.GetPtd(); //H cd3.m_nPub=nVar; //I nVar=cd3.GetPtd(); //J return 0;}
解析:
A、B、C是错误的,因为m_nPtr是父类的私有变量,所以不能被子类访问(任何一种继承方式都不行)。
D正确。cd1是公有继承,可以访问并改变父类的公有变量。
E错误,m_nPtd是父类Parent的保护变量,可以被公有继承的cd1访问,但不可以修改。!!!
F正确,公有继承下,可以通过子类函数访问父类的保护变量。
G错误,cd2是保护继承的,不可以直接修改父类的公有变量!!!。
H正确,保护继承下,可以通过函数访问父类的保护变量。
I错误,cd3是私有继承的,不可以直接修改父类的公有变量!!!。
J正确,私有继承下,可以通过函数访问父类的保护变量!!!。
0 0
- 继承与接口---子类的访问权限
- 子类继承父类放法访问权限的问题
- 子类的访问权限
- 继承与访问权限
- 继承与访问权限
- 继承与访问权限
- C++接口定义,实现,继承接口类的子类,实例对象访问方法问题
- 继承的访问权限
- 类成员的访问权限与继承权限
- java之中的四种访问权限和子类如何继承父类特性
- 1.2 继承与访问权限
- java中的继承-子类继承父类的权限问题
- public,private,protected的区别,继承方法与访问权限
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- public继承后,父类与子类访问隐藏
- public继承后,父类与子类访问隐藏
- Java 继承访问权限与初始化
- C++ 中的访问权限与继承方式
- 017redis3.0集群部署
- 手势滑动销毁Activity
- Android性能专项测试之Heap Viewer工具 分类: Android性能
- linux 释放内存缓冲
- Google Java Style 中文版
- 继承与接口---子类的访问权限
- 黑马程序员——面向对象的三大特点
- xcode7 如何真机测试
- Android性能专项测试之Memory Monitor工具
- dubbo_网络传输transport
- drools规则引擎因为内存泄露导致的内存溢出
- Tomcat 启动时 There is no Action mapped for namespace [/] and action name [] associated with context pa
- 模板方法模式(Template method)
- angularjs API