纯虚函数是虚函数后面添加=0的那种,只声明,需要在子类定义才能使用,看一个简单的例子:
class Base
{
public:
Base(){}
~Base(){}
virtual void sort() = 0;
private:
};
基类Base有一个sort()的纯虚函数,后面一个MyClass类继承该类
class MyClass : public Base
{
public:
MyClass();
~MyClass();
void run();
private:
int arr[10];
};
void MyClass::run()
{
std::cout << "MyClass run()" << std::endl;
sort();
for (int i = 0; i < 10; i++)
{
std::cout << arr[i] << " ";
}
}
run()函数调用基类的sort()函数,此时sort()函数是没有定义的,直接定义一个MyClass类实例,会出错,
下面定义一个Test类继承MyClass类
class Test : public MyClass
{
public:
Test();
~Test();
void sort() override;
private:
};
重写sort()函数。。。
void Test::sort()
{
std::cout << "Test function()" << std::endl;
//排序函数sort();
}
main()函数中实例化Test类,由于sort()函数已经定义,不会报错
int main()
{
Test test;
test.run();
}
这样做的好处:当不同的子类继承父类时,定义了不同的实现方法,那么实例化这个子类的时候,重写了纯虚函数,该子类的父类的实现方法就不同。提升了代码的可重用性