c++ 虚函数 纯虚函数 抽象类
虚函数:
声明虚函数的方法是在基类的成员函数原型前加上关键字virtual。简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。
其格式如下:
只需改变基类
class 类名
{......
virtual 类型 函数名 (参数表):
.......
};
纯虚函数:
- 在基类中只声明虚函数而不给出具体的函数定义体,将它的具体定义放在各派生类中,称此虚函数为纯虚函数。
- 通过该基类的指针或引用就可以调用所有派生类的虚函数,基类只是用于继承,仅作为一个接口,具体功能在派生类中实现。
- 形式:
virtual 类型 函数名(参数表)=0;
抽象类:
带有纯虚函数的类成为抽象类:
class 类名
{
virtual 类型 函数名(参数表)=0;//纯虚函数
..........
};
注意:
- 不能声明抽象类的对象,但可以声明指向抽象类的指针变量和引用变量。
- 引入抽象类的目的,主要是为了能将相关类组织在一个类继承结构中,并通过抽象类来为这些相关类提供统一的操作接口。
举例说明:
声明一个动物类
#ifndef Animal_H #define Animal_H #include <iostream> using namespace std; class Animal { public: virtual void cry()=0; virtual void action()=0; //{cout<<"zooooo"<<endl;} }; #endif
声明一个猫类继承与动物类
#include "animal.h" class Cat:public Animal { public: void cry(){cout<<"miaomiao"<<endl;} void action(){cout<<"pashu"<<endl;} };
声明一个Dog类继承与Aniaml类
#include "animal.h" class Dog:public Animal { public: void cry(){cout<<"wangwang"<<endl;} void action(){cout<<"zuandong"<<endl;} };
mian类
#include "animal.h" #include "cat.h" #include "dog.h" void display(Animal &p); void main() { //Animal a; Cat c; Dog d; //c=new Cat(); //d=new Dog(); //display(a); display(c); display(d); //c.cry(); } void display(Animal &p) { p.cry(); p.action(); }