虚拟和纯虚函数之间的区别?

时间:2010-09-24 09:04:56

标签: c++

  

可能重复:
  C++ Virtual/Pure Virtual Explained

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

2 个答案:

答案 0 :(得分:2)

纯虚函数就是这样声明的函数:

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

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

否则,它的工作原理完全相同。给出:

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

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

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

答案 1 :(得分:0)

  1. 虚拟功能有一个功能体。

  2. 可以通过Vartual函数完成重载。

  3. 定义为:Virtual int runFun();

  4. ,而

    1. Pure Vartual Function具有功能体。

    2. 必须在Pure Vartual功能中重载。

    3. 定义为:Virtual int runFun()= 0;