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

书上说派生类的对象可以访问基类中保护继承的保护成员。怎么我调试的时候就根本不能访问。到底咋回事?
#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的成员,私有成员还是不能访问的。

派生类的对象对基类中的什么成员是可以访问的?
基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。2、公有继承的访问规则 当类的继承方式为公有继承时,基类的public成员和protected成员被继承到派生类中仍作为派生类...

派生类对象对其基类中的什么成员是可访问的?( )
【答案】:B B。【解析】本题考查关于C++语言继承问题中派生类对基类的访问。C++语言中通常有三种继承修饰符,即public、protected、private,限制依次严格,另外对类中的数据和函数也由这三种修饰符进行限制,有三种成员是不能继承的:公有继承基类的私有成员,私有继承基类的私有成员,保护继承基类...

C++简单的选择题。。
派生类对公用继承的公用、保护成员都可以访问的。对保护继承的公用成员也是可以访问的,只是访问权限变为了保护。对基类的私有成员,派生类是不能访问的。另外,基类声明的友元函数对派生类是无效的的。

派生类的对象可以对其基类中公有继承的保护成员直接访问吗?为什么?
保护成员跟私有成员,只能在类内部访问,别管是基类的保护成员或者自己的保护成员,都不能用对象访问。既然不能用派生类的对象访问基类的保护成员,派生类可以做什么,它可以在类内访问基类的保护成员。

公有继承,私有继承,保护继承的区别
派生类的对象 只能访问派生类的 公有成员 (包括继承的公有成员),访问不了保护成员和私有成员。 2.保护继承_protected 保护继承中,基类的公有成员和保护成员被派生类继承后变成保护成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象不能...

派生类可以调用基类的私有成员吗?
派生类不能对基类私有成员进行访问。要在派生类中对基类成员进行访问,可以: 1,在派生类中对基类成员的public属性进行访问,以间接访问基类的私有成员; 2,在基类中将私有成员定义为protected访问属性,以在派生类中直接对其进行访问。当位于类成员列表之前时,private 关键字指定这些成员仅可从成员...

请问C++中继承时公有继承,保护继承与私有继承有何区别?谢谢
而不能访问private成员;派生类的对象不能访问基类中的任何的成员。保护继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public\/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

在哪种派生方式中,派生类可以访问基类中的protected成员( )
选B private只能被本类访问,public可以被所有类访问 protect自身,子类及同一个包中类可以访问

《面向对象程序设计》高手进~~~!!
protected:基类中的所有公有成员和保护成员都成了保护成员,只允许派生类的成员函数及派生类的派生类中的成员函数访问基类的非私有成员,不能通过派生类的对象直接访问基类的任何成员。2.派生类不能访问基类的私有成员。无论那种派生方式都继承了基类的所有成员,当然也包括私有成员,可以通过调用公有成员...

为什么不可以通过派生类对象名访问基类的保护成员呢?
只有public类型的变量才可以被该类的对象直接访问。基类的对象和派生类的对象都不能直接访问类的保护成员和私有成员。这也就是C++中类和struct的区别。C++类中不指定访问权限,默认是private的,而struct默认是public的。另外,这里的不能访问实际上是编译器做的限制,如果能够推导出类的内存布局,可以直接...

相似回答