虚函数继承中,虚函数为什么一定要在派生类中定义?
1. 什么是抽象类?
包含有纯虚函数的类,称为抽象类。纯虚函数是一个在基类中只有声明的虚函数,在基类中无定义,派生类中一定要给出自己的定义。
// 纯虚函数, 要有=0 void fun(int a, const char * b) = 0;
2. 抽象类为什么不能实例化?
可能是规定如此。可能的原因是,抽象类都是作为基类存在的,是对多种对象的共同点进行抽象的概念,从面对对象编程的思想来说,只要声明共同的行为即可,不需要给出定义。
举例来说,抽象类是方言,共同的特点是说话,至于是用东北话、四川话,还是普通话,就不需要指定(即使想指定,地球上那么多方言也不能都指定),派生类东北话、四川话中定义
具体的说话方式就可以了。如此一来,即简化了基类中的代码量,也方便派生类按照需求增添。
3. 虚函数为什么一定要在派生类中定义?
既然抽象类不能实例化,那么派生类继承的虚函数,仍然是纯虚函数,派生类也就成了抽象类,如此一来,当然不能实例化了。不能实例化,就不能创建对象,所以一定要定义。
当然,如果派生类依然是一个抽象,不定义当然可以,比如基类是生物,派生类是植物。