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

2024-12-29 12:03:47
推荐回答(4个)
回答1:

有这回事吗?我也是C++初学者,不过我想派生类对象作为派生类的实例,应该具有与派生类相同的功能吧。那么,派生类定义中能做的事,派生类对象差不多也能做吧。不过呢,看看编译器是怎么做的才行。如果在派生类中用到了基类的保护成员,那么派生类对象应该就能访问吧。但若是没用到,嘿嘿,编译器就可以把无用的东西去掉了,于是,在派生类对象中就没有访问基类保护成员的概念,于是虽然有指向基类实例的指针,但又怎么通过这个指针能访问到其中的保护成员呢?这方面的信息编译器是知道的,但是它不用,这就是语法呀(需要基类实例指针+位移),就访问不了了。可是偏偏又可以让编译器不做出这样的规则,那么派生类对象就拥有了基类的所有信息,那么啥都可以访问了。其实,起关键作用的还是C++语言的规范,编译器也是按规范办事。不过呢,偏偏我也是菜鸟,不懂得规范,所以就不知道规范上对这种情况是怎样的规定了。

回答2:

保护成员不能通过对象,在外部进行访问;在外部用对象直接访问的函数接口必须为public类型,但是类内的函数内部是可以相互调用的,protect和private起到了良好的保护,使得类更安全;类和对象的关系,LZ应该注意一下,对象只是类的实例化。

回答3:

在类外,你可以把保护成员和私有成员一样看待。
在类内部,你可以访问基类保护成员,不可以访问基类私有成员。
公有成员则是暴露的,随时处在风口浪尖之中。

回答4:

在派生类类内的成员函数中,如果有派生类实例对象的引用或者指针。可以通过该引用或指针来访问基类的protected成员