【问题标题】:Difference between virtual and pure virtual function? [duplicate]虚函数和纯虚函数的区别? [复制]
【发布时间】:2011-04-16 16:23:29
【问题描述】:

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

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    纯虚函数是这样声明的:

    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*

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

    【讨论】:

      【解决方案2】:
      1. 虚函数有一个函数体。

      2. 重载可以通过Vartual Function来完成。

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

      同时

      1. 纯虚函数在函数体上。

      2. Pure Vartual 函数中必须重载。

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

      【讨论】:

        猜你喜欢
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 2021-06-01
        • 2012-08-27
        • 2012-01-28
        • 1970-01-01
        相关资源
        最近更新 更多