派生类的对象对基类中的什么成员是可以访问的?

书上说派生类的对象可以访问基类中保护继承的保护成员。怎么我调试的时候就根本不能访问。到底咋回事?
#include <iostream>
using namespace std;

class A
{
public:

A(){i=5;}
protected:

int i;

void fun()
{
cout<<i<<endl;
}

};

class B:protected A
{
public:
void funn()
{
cout<<i;
}
};

main()
{
A aa;
// aa.i=2;//访问不了
B bb;
// bb.i=2;//访问不了
bb.funn();
// bb.fun();//出错访问不了

int z;cin>>z;
}

C++中派生类对基类成员的三种访问规则:

1、私有继承的访问规则

当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是在类的外部通过派生类的对象无法访问。

基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。

2、公有继承的访问规则

当类的继承方式为公有继承时,基类的public成员和protected成员被继承到派生类中仍作为派生类的public成员和protected成员,派生类的其它成员可以直接访问它们。但是,类的外部使用者只能通过派生类的对象访问继承来的public成员。

基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数直接访问它们。

3、保护继承的访问规则

当类的继承方式为保护继承时,基类的public成员和protected成员被继承到派生类中都作为派生类的protected成员,派生类的其它成员可以直接访问它们,但是类的外部使用者不能通过派生类的对象访问它们。

基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类中的private成员。

扩展资料

基类和派生类是一个相对的关系。基类和派生类反映了类与类的继承关系,是相对而言的。基类又称父类,是被派生类继承的类。派生类又称子类,是从一个已有类的基础上创建的新类,新类包含基类的所有成员,并且还添加了自己的成员。

假设有两个类A和B,A和B都需要实现一个打印的功能,原始的做法是A写一个打印函数,B也写一个打印函数。两个类还好可以写,但多了就特别麻烦。

这个时候我们就可以写一个类C,C里面写一个打印函数。A和B分别继承C,这样A和B就不要写打印函数了。这样即节省了代码,又优化了结构。上面的情况,C是A和B的基类,A和B是C的派生类。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-28
应该你是看错了吧,派生类的对象只可以访问基类中公有成员啊;
如果是保护继承的话,他的派生类的对象是不能访问基类的任何成员的啊,这一点跟私有继承一样;对象不能访问,但是他的派生类的成员函数可以访问基类的public和protected成员啊
楼主应该是对象与成员函数的权利混淆了吧本回答被提问者和网友采纳
第2个回答  2019-01-06
因为你是私有继承
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个类的子类所访问。
第3个回答  2008-04-09
在保护集成的情况下,基类的共有和保护成员以保护身份出现在派生类中。所以,派生类内可以访问基类的保护和私有成员,但派生类的对象却不可以访问

参考资料:C++课本

第4个回答  2008-04-09
派生类可以访问基类的public跟protected的成员,私有成员还是不能访问的。
相似回答