我尝试在编译器中运行此代码并输出" circle":
#include <iostream>
using namespace std;
class figure{
public:
void print(){cout << "figure";};
};
class circle: public figure{
public:
void print(){cout << "circle";};
};
int main() {
circle c;
c.print();
}
我没有将打印功能设置为虚拟但它仍具有相同的效果。这有什么理由吗?
答案 0 :(得分:0)
正如您所做的那样,您只能从类圈中调用方法 print 。 尝试执行以下操作
int main() {
figure* c = new circle();
c->print();
delete c;
}
您将看到数字,不再有圈。正如有些人所说,那就是名字隐藏。您可以在类 circle 中定义一个新函数,其名称与 figure 中的名称相同。因此,当您在 circle 对象上调用 print 时,可以调用其方法。
然而,如果 print 是一个虚方法,则覆盖该函数。因此,当您在 circle 对象上调用 print 时,只能调用一个函数。