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

请考虑标记为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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值