【发布时间】:2022-12-13 10:20:56
【问题描述】:
考虑:
#include <iostream>
class Base
{
public:
virtual void foo() { std::cout << "Base::foo()\n"; };
};
class Derived : public Base
{
public:
void foo() override
{
std::cout << "Derived::foo()\n";
Base::foo();
}
};
int main()
{
Derived obj;
obj.foo();
return 0;
}
这是我的代码。为什么我可以在衍生的类,如果我已经重新定义它衍生的班级。为什么编译器不删除类中的 Base::foo衍生的重新定义后?
【问题讨论】:
-
“为什么我可以在派生类中调用 Base::foo()”——嗯,因为这就是 C++ 的工作方式……我建议你选择a few good books 并实际学习这门语言(顺便说一句;这需要一些时间(3-5) 年)。
-
像这样调用
Base::foo(),成员函数调用没有使用动态调度机制。 -
你的头衔出卖了你——你说“重新定义”。没有任何内容被重新定义,这两个功能仍然存在,并且就像您所看到的那样在各种不同的上下文中可用。
-
一个问题是可能有一个子类或派生类需要
Base::foo()类。由于Base方法只有一个副本,删除Base::foo()方法并没有真正节省多少。
标签: c++ polymorphism virtual-functions