c++中假如A为B的派生类,继承方式为私有继承,是不是基类B中的成员只是对于派生类A来说全部为私有

c++中假如A为B的派生类,继承方式为私有继承,是不是基类B中的成员只是对于派生类A来说全部为私有成员?... c++中假如A为B的派生类,继承方式为私有继承,是不是基类B中的成员只是对于派生类A来说全部为私有成员? 展开
 我来答
侦探章邯
推荐于2016-11-04 · TA获得超过579个赞
知道小有建树答主
回答量:830
采纳率:0%
帮助的人:611万
展开全部
举个例子.

class A
{
public:
int m_nTelNum;
protected:
int m_nAge;
private:
int m_nMoney;
};
class B:public A
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;
}
void SetAge(int nAge)
{
m_nAge=nAge;
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这里就出现错误,因为基类的private成员不能用.
}
};

B objB;//创建B类的对象objB
objB.m_nTelNum=123456;//可以
objB.m_nAge=30;//错误.public继承中基类的protected在派生类中是protected
objB.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.

class C:protected A
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;
}
void SetAge(int nAge)
{
m_nAge=nAge;
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这里就出现错误,因为这是基类的private成员不能用.
}
};

C objC;//创建C类的对象objC
objC.m_nTelNum=123456;//注意这里和public的区别,这里错误,m_nTelNum变成了C类的protected成员
objC.m_nAge=30;//错误.protected继承中基类的protected在派生类中是protected,这与public同相
objC.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.

class D:private A
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;
}
void SetAge(int nAge)
{
m_nAge=nAge;
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这里就出现错误,因为这是基类的private成员不能用.
}
};

D objD;//创建D类的对象objD
objD.m_nTelNum=123456;//错误,m_nTelNum变成了D类的private成员
objD.m_nAge=30;//错误.private继承中基类的protected在派生类中是private
objD.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.

从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同.现在还看不出public和protected继承的区别
那再看一个例子.
class E:public B
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;//可以 因为这是B的公有成员
}
void SetAge(int nAge)
{
m_nAge=nAge;//可以 因为这是B的保护成员,现成变成E的protected成员
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这个肯定不可以!
}
};
E objE;//
objE.m_nTelNum=123456;//可以
//其它的两个就不能用了.
class F:public C
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;//可以 因为这是C的保护成员,这里与public继承已经有区别但还没有表现出来
}
void SetAge(int nAge)
{
m_nAge=nAge;//可以 因为这是C的保护成员,现成变成E的protected成员
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这个肯定不可以!
}
};
F objF;
objF.m_nTel=123456;//错误,因为这是F的保护成员.注意与E类区别
class G:public D
{
void SetTelNum(int nTelNum)
{
m_nTelNum=nTelNum;//不可以 因为这是D的private成员,注意这里区别
}
void SetAge(int nAge)
{
m_nAge=nAge;//不可以 因为这是D的private成员,注意区别
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这个肯定不可以!
}
};
//那G在类外就没有了可以引用的继承过来成员了!
//这些继承方式是很难理解的.最好的办法就是多写代码去试.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式