【发布时间】:2021-07-22 06:56:12
【问题描述】:
假设我有以下课程:
class Base {
public:
class Nested {
virtual void display() {
std::cout << "Not overridden" << std::endl;
}
};
Nested N;
};
我还有另一个名为 Derived 的类继承自类 Base。
是否可以覆盖在Nested 中声明的display() 方法,以便在Derived 类中这样做:
void display() {
std::cout << "Overridden" << std::endl;
}
如果是这样,怎么做?
如果没有,我还有什么其他选择?
【问题讨论】:
-
不,这不可能,这些类除了嵌套关系之外是完全独立的。
-
由于
Base没有名为display的方法,因此不清楚您希望从Base派生的任何内容被覆盖。 -
The
Nested N必须是多态的(指针或引用,智能指针std::unique_ptr<Nested>在这里是一个不错的选择),然后 Derived 必须用 @ 的实例替换 N 987654333@ 而不是Base::Nested -
看看 C++ iostreams,其中
fstream导致iostream中的streambuf成员变为filebuf,该filebuf派生自streambuf。提示:基类实际上使用了一个指针,streambuf声明了filebuf覆盖的虚拟成员。 -
@BenVoigt 我还没有熟悉指针,如果不是不便,你能写一个简短的例子来解释你所说的话吗?
标签: c++ function class overriding virtual