C++私有继承能否继承基类的私有成员的问题。

我写了个程序,用于证明基类的私有成员能被派生类“私有继承”下来,只是不能在派生类显式调用基类的私有成员。你们觉得是否正确呢?程序结果是:2#include<iostrea... 我写了个程序,用于证明基类的私有成员能被派生类“私有继承”下来,只是不能在派生类显式调用基类的私有成员。你们觉得是否正确呢?
程序结果是:
2

#include<iostream>
using namespace std;

class A
{
private :
int a;
public :
//构造函数,默认将a赋值为2;
A()
{
a = 2;
}
//获得私有成员a的值
int getNum()
{
return a;
}
};

class B : private A
{
public:
//因为是私有继承,无法访问基类的公有成员函数,
//只能自定义一个成员函数来访问该类B从基类A继承下来的属性。
int get()
{
return getNum();//getNum函数是从基类私有继承下来的私有函数。
}
};

int main()
{
B b;
cout<<b.get()<<endl;
}
展开
 我来答
娱乐小八卦啊a
高粉答主

2020-05-11 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117860

向TA提问 私信TA
展开全部

首先,基类的私有成员是会被派生类继承的,但是不能被派生类访问;从物理上讲是复制过来了,在内存中确实有复制。但是从程序上看是被屏蔽了,不能直接调用。

其次,对于基类public类型的成员变量,无论是公有继承还是私有继承,都可以直接在派生类中定义的成员函数直接访问。

对于基类private类型的成员变量,无论是公有继承还是私有继承,在派生类中定义的成员函数都不能直接访问基类的私有成员,只能通过基类的public或protect成员函数访问。

扩展资料

父类A中的所有成员在子类对象B中都是不可见的。但是父类中的公有成员在私有继承的子类B中是可见的,可以被访问,但是其属性在子类发生降级。

父类A中的public和protected属性的成员在子类中虽然能被访问,但是其属性在子类中被降级为private,所有子类成员是无法访问父类成员的,因为对于子类对象来说,父类的成员全部都是private,都是不可见的。

关于私有继承的总结:父类公有成员和保护成员都作为子类的私有成员,并且不能被这个子类的对象所访问。如果子类再派生出一个孙子类的话,因为父类的成员在子类中只有公有成员和保护成员可以访问,并且属性降级为private。

所以孙子类即使是公有继承子类的,也不能访问private成员。所以在私有继承时,父类的成员只能由直接派生子类访问,而无法再往下继承。

百度网友ad24593
2018-09-26
知道答主
回答量:2
采纳率:0%
帮助的人:1647
展开全部
不会继承!(无论什么继承方式)如果可以的话,派生类对象就可以直接访问基类的私有成员了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
y336y337
2012-05-11
知道答主
回答量:7
采纳率:0%
帮助的人:6万
展开全部
要想实现LZ的问题,应该没必要这样做吧 ,C++类的封装特性都被你破坏了,程序可行与否尚且不论,就算你这程序可行,也是不好的编程习惯
追问
怎么破坏了封装性?得到私有成员也属于破坏封装性?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
saloyun
推荐于2017-10-11 · TA获得超过342个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:363万
展开全部
这本身就是没错的。

谁告诉你私有变量不被继承的呢?根本不需要证明啊,无论是公有,私有,还是保护成员都会被继承。只是采用不同的继承方式,对变量的访问会不一样。

对于public类型的成员变量,无论是公有继承还是私有继承,都可以直接在派生类中定义的成员函数直接访问。

对于private类型的成员变量,无论是公有继承还是私有继承,在派生类中定义的成员函数都不能直接访问基类的私有成员,只能通过基类的public或protect成员函数访问。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-11
展开全部
继承基本不用私有继承,大多用公有继承,公有继承也是不能直接访问基类的私有成员的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式