继承与接口---子类的访问权限

来源:互联网 发布:软件工程技术应用 编辑:程序博客网 时间: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
原创粉丝点击