无法从派生类访问受保护的成员
Unable to access protected member from derived class
我有一个类似的设置。从包含受保护成员x的单个基类继承多个级别。
class Sprite {
protected:
float x, y;
}
class AnimatedSprite : Sprite {
public:
void draw(float x, float y);
}
class Player : AnimatedSprite {
public:
void draw(float x, float y);
}
在派生类Player中绘制方法的实现是这样的。
void Player::draw(float x, float y) {
AnimatedSprite::draw(this->x, this->y);
}
然而,编译器抱怨成员x和y是不可访问的,即使它们在基类中被列为保护。
默认class
的派生为private
。如果您想访问protected
基成员,那么您必须派生public
:
class AnimatedSprite : public Sprite
// ...
class Player : public Sprite
(您也可以使派生为protected
,但这将是一件相当奇特的事情。同样,您也可以将第一个派生设置为public
或protected
,而将第二个派生设置为private
,但这与类层次结构的预期意图不匹配。在这两种情况下,public
继承显然是您要寻找的。
AnimatedSprite
使用私有继承,因此Sprite
的成员成为AnimatedSprite
的私有成员。您可能希望使用受保护的继承:
class AnimatedSprite : protected Sprite {
public:
void draw(float x, float y);
}
class Player : protected AnimatedSprite {
public:
void draw(float x, float y);
}
相关文章:
- C++:无法访问声明的受保护成员
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 是否可以基于私有/受保护成员分配类枚举?
- 依赖模板基础的受保护成员
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 将对象强制转换为派生类以访问父类的受保护成员
- 使从一个基类派生的类能够使用继承的受保护成员
- 派生类如何使用基类的受保护成员
- 访问派生类C++中的受保护成员
- 访问基类的受保护成员
- 如何访问多个继承类中的受保护成员
- 如何从另一个类的基类访问派生类中的受保护成员
- 无法访问派生类中的基本受保护成员!(在虚函数中)
- 如何通过派生类访问基类的受保护成员?
- 如果孩子不需要父母班级的所有受保护成员,这是不好的班级设计吗?