面向对象编程方面的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/19 07:43:53
派生类继承了基类(除构造函数和析构函数)的所有特征,那基类中的私有成员在派生类中以什么身份出现(公有、保护还是私有)?
如:
class A
{ private:
int a;
public:
void set_a(int value);
};
class B:public A
{
private:
int b;
};
class A::set_a(int value)
{
a=value;
}
我们知道,基类A中的公有和保护成员的访问属性在B类中不变,基A类的私有成员在B类中不可访问,但B类是继承了A类的(除构造函数和析构函数)以外的所有特征,那Class A类中的私有成员a,在派生类B中以何种方式呈现呢(public,protected,private)?
对wangyu0831回答进行一下补充:
那书上说派生类继承了基类(除构造函数和析构函数)的所有特征,这又如何理解?
我所举的例子中,派生类居不能访问a,但继承了set_a方法,我们可以通过这个方法来访问a.如
void main()
{
B b;//申明了B类的对象
b.set_a(5);//用从A类继承来的set_a方法给a赋值;
如果在A类中从申明一个显示a的函数(public部分);那B中,不是可以把这个a显示出来吗?而我们知道B类的申明中并没有申明a,而这个b是B类申明的对象,如果a没有从A类中继承而来的话,那a是哪里来的?

如果要使派生类可以访问基类的成员,但同时不使成员在其他的地方被访问,应该使用protected
用private的话那就只有拥有这个成员的类可以访问它了,连派生类都不行,你的class A就是这种情况。
用public则任何地方都可以访问这个类数据成员了。

所以你这里应该把class A中的private改为protected才能在B中访问。

Class A类中的私有成员a,在派生类B中以何种方式呈现?在B中成员a是不可见的,不会被B继承下来,是完全不能呈现的!谈不上是public,protected还是private。

即使你在类B中调用set_a(),这个函数仍然是类A的成员函数,当然可以访问类A的成员a了。

为什么说在B中成员a是不可见的,因为你无法在类B中通过this指针来直接访问它,并不是说它不存在。
形象的说就是,对于类B,它只看的见有一个操作set_a(),而看不见这个操作的对象a。

如果你在类A里加上friend class B;在B中就可以操作a了,也就是说此时a对于类B是可见的了。

a属于B的private。B的对象不能直接访问A的a,只能访问自己的a