关于C++:虚函数与纯虚函数的区别?


Difference between virtual and pure virtual function?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ Virtual/Pure Virtual Explained

b/w虚函数和纯虚函数的确切区别是什么?在什么情况下,我们应该在哪里使用这些函数?


纯虚函数是这样声明的:

1
2
3
class Foo {
    virtual void bar() = 0;
};

barFoo的纯虚拟成员。它没有实现(因此= 0),不能调用。继承Foo的任何类都必须提供bar的实现。这是唯一的区别:父类没有纯虚拟的实现,因此派生类必须提供它。(有一个例外,但很少使用。)

否则,它的工作方式完全相同。鉴于:

1
2
3
class Baz : public Foo {
    virtual void bar() {}
};

可以使用类型为Foo*Baz::bar的指针访问Baz的任何实例。如果Foo::bar是纯虚拟的,那么Foo就不能被实例化,对Foo::bar的调用将是错误的。如果Foo::bar不是纯的,那么对于Foo的实例将调用为Foo::bar提供的实现,对于Baz的实例将调用Baz::bar,即使它是通过Foo*提供的。

(纯虚拟也可以有实现,例如,Baz::bar可以调用Foo::bar,但这并不常见。)


  • 虚函数有一个函数体。

  • 重载可以由vartual函数完成。

  • 定义为:virtual int runfun();

  • 虽然

  • 纯变函数在函数体上有。

  • 重载必须在纯vartual函数中。

  • 定义为:virtual int runfun()=0;