提问人:Christopher Miller 提问时间:10/13/2023 最后编辑:Christopher Miller 更新时间:10/13/2023 访问量:124
从抽象类继承时,“公共”和“私有”继承之间的区别
Difference between `public` and `private` inheritance when inheriting from abstract classes
问:
我有一个班级:Placeable
struct Placeable {
virtual void place_at(int x, int y) const {}
virtual ~Placeable() = default;
};
我还有其他几种类型,例如 ,它们继承自 ,并覆盖函数。Box
Placeable
place_at()
struct Box : Placeable { /* Private inheritance for now (by default) */
void place_at(int x, int y) const override {
/* ...Code... */
}
};
正如你可能知道的,我打算成为一个抽象类,只有函数,没有成员变量,以便指定继承类型的接口。但是,我不确定我应该在 Box
和其他相关类型上使用哪种类型的继承。Placeable
我了解到,在继承中,基类的成员可以从派生类访问,而在继承中,它们不是(我怀疑继承是我在这里寻找的,所以我把它省略了。让我知道我是否应该使用它)。但是,由于没有成员变量,这里的公共
继承和私有
继承之间有什么区别吗?当我运行此测试代码时:public
private
protected
Placeable
#include <iostream>
struct Placeable {
virtual void place_at(int x, int y) const {}
virtual ~Placeable() = default;
};
struct Box : Placeable { /* private by default, try changing to public */
void place_at(int x, int y) const override {
/* ...Code... */
}
};
int main()
{
Placeable *ptr = new Box();
/* Calls `Box::place_at()` no matter the type of inheritance! */
ptr->place_at(1, 2);
delete ptr;
return 0;
}
和继承之间似乎没有区别; 被要求两者兼而有之。有人可以解释一下我发生了什么事吗?我一定错过了什么。public
private
Box::place_at(1, 2)
public
private
答: 暂无答案
评论
place_at()
public
struct
class
class
private
class
struct
virtual bool is_at(int x, int y) const = 0;
class
struct
Placeable
Box
is_at
struct Box : Placeable
默认情况下,不是public inheritance
private
Placeable *ptr = new Box;