纯虚函数就是一个在基类中的虚函数,差别只是在一般的虚函数声明的后面加了“=0”,虚函数允许函数通过与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,称为运行时的多态性,虚函数是可以有具体实现代码的。那么,为什么要有纯虚函数?在基类中的函数只有说明而没有具体定义的时候,不执行有意义的操作,也没有具体去实现代码,于是在派生类(也就是子类)中就可以实现具体的操作,无论是单继承也好,还是多继承也好,重新定义这个在基类声明的函数,这个函数的实现可以根据需求去实现,咱们来看一个例子:
#include <iostream> #include <cstring> using namespace std ; //动物类是基类-->由于内部声明了纯虚函数,所以它是一个抽象类 //抽象类不能被实例化,否则编译器报错 class Animal { public : Animal(); protected : string name ; int age ; char sex ; int score ; public : //声明纯虚函数===>必须要在子类中去实现,否则编译器会报错 virtual int setdog(string name , int age ,char sex , int score) = 0 ; virtual void show() = 0; }; Animal::Animal() { } //狗也是动物,狗类是动物类的 派生类 class Dog : public Animal { public: int setdog(string name , int age , char sex , int score); void show(); }; int Dog::setdog(string name , int age , char sex , int score) { this->name = name ; this->age = age ; this->sex = sex ; this->score = score ; } void Dog::show() { cout << "Dog name:" << this->name << endl ; cout << "Dog age:" << this->age << endl ; cout << "Dog sex:" << this->sex << endl ; cout << "Dog score:" << this->score << endl ; } int main(void) { Dog *ptr = new Dog ; Dog *ptr1 = new Dog ; ptr->setdog("HUAHUA",3,'Y',66); ptr1->setdog("XIAOXIAO",4,'N',88); cout << "==========================" << endl ; ptr1->show() ; cout << "==========================" << endl ; ptr->show(); cout << "==========================" << endl ; delete ptr ; delete ptr1 ; return 0 ; }狗类是动物类的派生类,动物类作为基类,没有具体实现setdog和show方法,在狗类中实现了这两个方法,这两个方法也被称之为派生类的虚函数。
运行结果:
Engineer-Bruce_Yang 认证博客专家 嵌入式硬件 单片机 arm开发 本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。