为什么这个纯虚方法没有编译?

时间:2017-05-29 10:33:51

标签: c++ pure-virtual

我使用纯虚拟方法,如下面的代码所示。

#include <iostream>
using namespace std;
class Advertisment
{
public:
   vitual void price (int Uchrg, int no_of_unt) = 0;
   {
   }
};

class TVadvertisment : public Advertisment
{
public:
   void price (int Uchrg, int no_of_unt)
   {
      int adPrice = Uchrg * no_of_unt;
      cout << "Advertisment Price: " << adPrice;
   }
};

int main()
{
   TVadvertisment T;
   T.price(1000, 60);
   return 0;
}

据我所知,纯虚函数将被声明为virtual void display() = 0;。但 Code :: Blocks 编译器因此= 0而显示错误。没有它,它将成功编译。

而且我也没有使用指针来调用派生类的方法。

1 个答案:

答案 0 :(得分:1)

您的函数是纯虚函数,这意味着该方法是虚拟的,甚至不在基类(= 0)中实现。 所以你必须在它之后删除它。

必须是:

virtual price(int Uchrg, int no_of_unt) = 0;

没有{ }

虚拟意味着从基类继承的类可以覆盖该方法并通过基类接口调用。如果一个类有一个纯虚方法,那么该类是抽象的,并且该函数需要被继承自该基类的类来实例化。

简而言之:

<强>虚拟

virtual price(int Uchrg, int no_of_unt)
{
   // Implementation
}

实现是基类。子类需要覆盖,但他们可以。该课程不是抽象的,可以实现。

纯虚拟:

virtual price(int Uchrg, int no_of_unt) = 0; // No implementation

没有实现,子类必须覆盖它不是抽象的。

通过基类调用虚拟方法:

Base* pBase = new Derived;
pBase->fun();

该方法是通过基类的接口调用的,但它将是派生类&#39;方法