当a在基类中具有相同的函数名,并且每个函数的代码具有不同的派生类时,是否需要将我的函数设置为虚拟或者它只是更好的编程的一部分?
答案 0 :(得分:3)
根本不需要使方法成为虚拟方法。但是,如果你想通过“后期绑定”调用它,它应该是虚拟的,即如果给定一个基本指针,你想要调用派生方法。
如果您不希望这种情况发生,通常是因为这些方法不相关,在这种情况下,您最好为派生类中的方法赋予不同的名称。
答案 1 :(得分:0)
在运行时动态调度虚拟函数的调用。这是多态性的基础。
在基类中声明为虚拟的函数将在子类中隐式虚拟。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您希望使用基类指针到派生类实例,并且函数具有相同的签名,那么您可能希望创建函数virtual
,以及使类析构函数{{1} }。这样,如果某人有一个指向派生类型的父类指针并且他们想要调用该函数,他们可能希望执行子类的版本,如果它与父类不同。
virtual
答案 4 :(得分:0)
class A {
public:
void Foo() {}
virtual void Bar() {}
};
class B : public A {
public:
void Foo() {}
virtual void Bar() {}
};
int main() {
A *a = new A;
B *b = new B;
A *c = b;
a->Foo(); // calls A::Foo on a
b->Foo(); // calls B::Foo on b
c->Foo(); // calls A::Foo on b
a->Bar(); // calls A::Foo on a
b->bar(); // calls B::Foo on b
c->bar(); // calls B::Foo on b
delete a;
delete b;
}