虚拟成员功能必要性

时间:2010-12-19 19:55:34

标签: c++ class virtual

当a在基类中具有相同的函数名,并且每个函数的代码具有不同的派生类时,是否需要将我的函数设置为虚拟或者它只是更好的编程的一部分?

5 个答案:

答案 0 :(得分:3)

根本不需要使方法成为虚拟方法。但是,如果你想通过“后期绑定”调用它,它应该是虚拟的,即如果给定一个基本指针,你想要调用派生方法。

如果您不希望这种情况发生,通常是因为这些方法不相关,在这种情况下,您最好为派生类中的方法赋予不同的名称。

答案 1 :(得分:0)

在运行时动态调度虚拟函数的调用。这是多态性的基础。

在基类中声明为虚拟的函数将在子类中隐式虚拟。

答案 2 :(得分:0)

不,没有必要这样做。

事实上,何时声明虚拟和何时不是有效的程序设计本身。

查看here以获取有关虚拟和纯虚函数的更多信息。

答案 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;
}

请参阅C++ FAQ § Inheritance — virtual functions