我使用纯虚拟方法,如下面的代码所示。
#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
而显示错误。没有它,它将成功编译。
而且我也没有使用指针来调用派生类的方法。
答案 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;方法