无法从派生 class 访问受保护成员
Unable to access protected member from derived class
我有一个与此类似的设置。来自包含受保护成员 x.
的单个基 class 的多级继承
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);
}
派生 class Player 中 draw 方法的实现与此类似。
void Player::draw(float x, float y) {
AnimatedSprite::draw(this->x, this->y);
}
但是编译器抱怨成员 x 和 y 不可访问,即使它们在基 class 中被列为受保护 class。
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);
}
默认情况下 class
的推导是 private
。如果要访问 protected
基本成员,则必须进行派生 public
:
class AnimatedSprite : public Sprite
// ...
class Player : public Sprite
(您也可以进行推导 protected
,但这将是一件相当奇特的事情。您同样可以进行第一个推导 public
或 protected
并保留第二个 private
,但这与 class 层次结构的预期意图不符。public
继承显然是您在这两种情况下所寻找的。)
我有一个与此类似的设置。来自包含受保护成员 x.
的单个基 class 的多级继承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);
}
派生 class Player 中 draw 方法的实现与此类似。
void Player::draw(float x, float y) {
AnimatedSprite::draw(this->x, this->y);
}
但是编译器抱怨成员 x 和 y 不可访问,即使它们在基 class 中被列为受保护 class。
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);
}
默认情况下 class
的推导是 private
。如果要访问 protected
基本成员,则必须进行派生 public
:
class AnimatedSprite : public Sprite
// ...
class Player : public Sprite
(您也可以进行推导 protected
,但这将是一件相当奇特的事情。您同样可以进行第一个推导 public
或 protected
并保留第二个 private
,但这与 class 层次结构的预期意图不符。public
继承显然是您在这两种情况下所寻找的。)