【发布时间】:2014-01-06 21:05:22
【问题描述】:
奇怪的继承情况:
class Base
{
public:
public virtual foo() = 0;
};
class A : public Base
{
public:
public virtual foo() override;
protected:
int bar;
};
class B : public A//something like 'public Base, protected A'
{
public:
public virtual foo() override;
};
基本上,B 可以继承 A 的所有内容,但只能“看到”(并且只能转换为)Base。基本上,我想在 B 中使用 A 的一堆功能,但希望 B 在语义上与 A 不同:
B b;
Base* valid_ptr = &b;//want this to be ok
A* invalid_ptr = &b;//want this to be invalid
A& invalid_ref = b;//want this to be super invalid
A prevent(b);//want this to not be allowed to happen
【问题讨论】:
-
有一个而不是一个?只是想到这个......
-
当您尝试时发生了什么?
-
也许您可以将
A作为模板参数传递。 -
A应该继承自Base吗?否则override将阻止代码编译。 -
私下继承
A?
标签: c++ inheritance