派生类的对象可以访问基类的保护成员吗

时间:2022-11-09 20:00:42
为什么说派生类不能访问独立基类的保护成员?

33 个解决方案

#1


谁说的?

#2


是啊!谁说的啊?

#3


只要是派生类,都可以丛基类中继承!除非把基类的构造函数定义为私有的!
这样派生类无法构造。

#4


不可以,在派生类中可以访问基类的保护成员,但派生类的对象就不可以

#5


我同意HEROWANG的说法

  是可以访问的!!!!

#6


派生类对象可以访问其从基类继承来的保护成员,但不能访问其基类对象的保护成员

#7


可以访问基类的受保护的成员。

#8


可以。派生类当然能了,但是他的对象就不可以了。对吧。

#9


给您的两句应牢记的话:
在派生类中可以访问基类的保护成员,但派生类的对象就不可以。
除非把基类的构造函数定义为私有的,这样派生类无法构造。


#10


那要看派生类的继承方法是public 还是private,如是派生类中可以访问基类的保护成员,否则,不能访问独立基类的保护成员

#11


派生类可以通过基类的成员函数去访问基类的private成员。

#12


你应该区分一下派生类和派生类对象的区别。
派生类是有权访问基类保护成员的,因为保护成员的设置就是为派生中方便对成员的访问而设备的吗。
而派生类的对象则是不可能的,因为在继承中,基类的保护成员在派生类中至少也是保护成员(公有继承时),但是对于由它创建的对象来说,保护成员是不能直接访问的。

#13


在派生类中可以访问基类的保护成员,但派生类的对象不可以访问基类对象的保护成员。

#14


保护成员不就是让派生类来访问的吗?

#15


当然可以。

#16


当然可以,在派生类可以访问基类的保护成员。

#17


可仿问保护成员,但不可以访问私有成员。

#18


本来我认为是可以的,但是现在都糊涂了

给个权威一点的说法吧

#19


同意TrWorks(TrWorks)

#20


派生类是有权访问基类保护成员的,因为保护成员的设置就是为派生中方便对成员的访问而设备的
但派生类的对象不可以访问基类的保护成员。

#21


protect就是专门为了它的继承类访问的,但是你的继承类对象去调用protect中的成员,那么就是相当与你在public访问这些成员,这一点要高清楚吖。。你可以在你的继承类的成员函数里访问父类的protect成员。

#22


我的理解是这样的,所谓的访问权限的含义:3种访问权限。真正的目的是约束3类人:基类的开发者,派生类的开发者,用户;基类的开发者当然可以用有3种权限。派生类的开发者自然就有2种权限。(记住这两类人都是在开发类,也就是在类域中使用这3种权限,你不防试一下,再派生类的成员函数中是可以使用基类对象来使用基类protect成员的。)用户,当然就有一种权限,他们才是定义类的人。所以我认为,所谓权限是对3类人而言的!

#23


同意校小张的看法,还要看是不是public继承

#24


public 继承的类将继承其基类的protected 成员和public 成员,并作为自己的Protected 和public成员,所以在派生类内部可以*访问,在派生类外部必须友元对象才能访问Protected成员。

#25


鄙视楼上的灌水!!!
保护成员就是让派生类继承的!你可能试图用派生类的对象直接访问其父类的保护成员,这是不可以的。保护的与私有的成员只能通过公有的成员函数来访问。

#26


to  yeahspyme
同意你的说法

#27


讲了那么多,其实就是不可以,你可以去找找相关的资料。

#28


派生类对象是不可以直接访问基类的保护成员的,(这是对于派生类对象而言,)
如:class A { protected: int data;};
    class B:pulblic A { public: int data2;};
    B object;
    object.data=100;  ///你说这样的访问合法吗?

对于基类的的保护成员,通过public继承后,成为派生类的保护成员,只有派生类本身的成员函数才有访问该保护成员的权限。

   


#29


楼长的话好象没有说清楚啊,有两层意思的!

#30


可以
担有两分copy
本身有一份  subclass有一份
通过dynamic_cast可以读取道sublass的数据

#31


分清楚要访问的protected成员是不是自己从基类继承过来的,
如果是,那么就有访问权限。如果是别的instantiate object的
protected成员,就没有访问权限。

>> zhaozhencn,  用你的例子

class A { protected: int data;};
class C { protected: int data;};

class B:pulblic A 
{
public:
   int method1();
   int method2(C c);
};

int B::method1()
{
    return data++; // OK,这个data是从基类继承过来的,是自己的。
}

int B::method2(C c)
{
    return c.data; // Compiler error,这个data是别人的,不能动
}

#32


"派生类的对象可以访问基类的保护成员吗"
搂主的这句话好像有点问题,
派生类的成员函数是可以访问基类的保护成员,而派生类的对象是不可以引用基类和它自己的保护成员,

#33


当然能访问了.

#1


谁说的?

#2


是啊!谁说的啊?

#3


只要是派生类,都可以丛基类中继承!除非把基类的构造函数定义为私有的!
这样派生类无法构造。

#4


不可以,在派生类中可以访问基类的保护成员,但派生类的对象就不可以

#5


我同意HEROWANG的说法

  是可以访问的!!!!

#6


派生类对象可以访问其从基类继承来的保护成员,但不能访问其基类对象的保护成员

#7


可以访问基类的受保护的成员。

#8


可以。派生类当然能了,但是他的对象就不可以了。对吧。

#9


给您的两句应牢记的话:
在派生类中可以访问基类的保护成员,但派生类的对象就不可以。
除非把基类的构造函数定义为私有的,这样派生类无法构造。


#10


那要看派生类的继承方法是public 还是private,如是派生类中可以访问基类的保护成员,否则,不能访问独立基类的保护成员

#11


派生类可以通过基类的成员函数去访问基类的private成员。

#12


你应该区分一下派生类和派生类对象的区别。
派生类是有权访问基类保护成员的,因为保护成员的设置就是为派生中方便对成员的访问而设备的吗。
而派生类的对象则是不可能的,因为在继承中,基类的保护成员在派生类中至少也是保护成员(公有继承时),但是对于由它创建的对象来说,保护成员是不能直接访问的。

#13


在派生类中可以访问基类的保护成员,但派生类的对象不可以访问基类对象的保护成员。

#14


保护成员不就是让派生类来访问的吗?

#15


当然可以。

#16


当然可以,在派生类可以访问基类的保护成员。

#17


可仿问保护成员,但不可以访问私有成员。

#18


本来我认为是可以的,但是现在都糊涂了

给个权威一点的说法吧

#19


同意TrWorks(TrWorks)

#20


派生类是有权访问基类保护成员的,因为保护成员的设置就是为派生中方便对成员的访问而设备的
但派生类的对象不可以访问基类的保护成员。

#21


protect就是专门为了它的继承类访问的,但是你的继承类对象去调用protect中的成员,那么就是相当与你在public访问这些成员,这一点要高清楚吖。。你可以在你的继承类的成员函数里访问父类的protect成员。

#22


我的理解是这样的,所谓的访问权限的含义:3种访问权限。真正的目的是约束3类人:基类的开发者,派生类的开发者,用户;基类的开发者当然可以用有3种权限。派生类的开发者自然就有2种权限。(记住这两类人都是在开发类,也就是在类域中使用这3种权限,你不防试一下,再派生类的成员函数中是可以使用基类对象来使用基类protect成员的。)用户,当然就有一种权限,他们才是定义类的人。所以我认为,所谓权限是对3类人而言的!

#23


同意校小张的看法,还要看是不是public继承

#24


public 继承的类将继承其基类的protected 成员和public 成员,并作为自己的Protected 和public成员,所以在派生类内部可以*访问,在派生类外部必须友元对象才能访问Protected成员。

#25


鄙视楼上的灌水!!!
保护成员就是让派生类继承的!你可能试图用派生类的对象直接访问其父类的保护成员,这是不可以的。保护的与私有的成员只能通过公有的成员函数来访问。

#26


to  yeahspyme
同意你的说法

#27


讲了那么多,其实就是不可以,你可以去找找相关的资料。

#28


派生类对象是不可以直接访问基类的保护成员的,(这是对于派生类对象而言,)
如:class A { protected: int data;};
    class B:pulblic A { public: int data2;};
    B object;
    object.data=100;  ///你说这样的访问合法吗?

对于基类的的保护成员,通过public继承后,成为派生类的保护成员,只有派生类本身的成员函数才有访问该保护成员的权限。

   


#29


楼长的话好象没有说清楚啊,有两层意思的!

#30


可以
担有两分copy
本身有一份  subclass有一份
通过dynamic_cast可以读取道sublass的数据

#31


分清楚要访问的protected成员是不是自己从基类继承过来的,
如果是,那么就有访问权限。如果是别的instantiate object的
protected成员,就没有访问权限。

>> zhaozhencn,  用你的例子

class A { protected: int data;};
class C { protected: int data;};

class B:pulblic A 
{
public:
   int method1();
   int method2(C c);
};

int B::method1()
{
    return data++; // OK,这个data是从基类继承过来的,是自己的。
}

int B::method2(C c)
{
    return c.data; // Compiler error,这个data是别人的,不能动
}

#32


"派生类的对象可以访问基类的保护成员吗"
搂主的这句话好像有点问题,
派生类的成员函数是可以访问基类的保护成员,而派生类的对象是不可以引用基类和它自己的保护成员,

#33


当然能访问了.