如何解决覆盖嵌套类的虚函数
假设我有以下课程:
class Base {
public:
class Nested {
virtual void display() {
std::cout << "Not overridden" << std::endl;
}
};
Nested N;
};
我还有一个名为 Derived
的类,它继承自类 Base
。
是否可以覆盖在 display()
中声明的 Nested
方法,以便在 Derived
类中执行此操作:
void display() {
std::cout << "Overridden" << std::endl;
}
如果是,怎么做?
如果没有,我还有什么其他选择?
解决方法
嵌套类(来自 cppreference):
嵌套类的名称存在于封闭类的作用域中,嵌套类的成员函数的名称查找在检查嵌套类的作用域后访问封闭类的作用域。与其封闭类的任何成员一样,嵌套类可以访问封闭类有权访问的所有名称(私有、受保护等),但它在其他方面是独立的,对封闭类的 this 指针没有特殊访问权。
从 c++11 开始
嵌套类中的声明可以使用封闭类的任何成员,遵循非静态成员的通常使用规则。
这么草率地说,嵌套类是关于名称和访问成员的。就是这样。
从 Base
派生的类不继承方法 display
,因为 Base
没有方法 display
。关于从 Base
继承,几乎没有区别:
class Nested {
virtual void display() {
std::cout << "Not overridden" << std::endl;
}
};
class Base {
public:
Nested N;
};
class Derived : public Base {};
Derived
继承成员 N
,但没有方法,因为 Base
没有方法(除了特殊的编译器生成的方法)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。