子类的访问权限

请考虑标记为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 cds;

 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=cds.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、付费专栏及课程。

余额充值