是一种在基类中只有声明,没有定义的函数。
1.引入目的:
有时候我们的基类实例化出来的对象实际上是没有意义的,
如我们想要的是 老虎 狮子 孔雀 大象。。等这些类的对象是有意义的,
但是直接实例化一个动物类对象是没有任何意义的。
2.声明方式:
virtual 返回值类型 函数名(形参表) = 0;
如:
virtual void show() = 0;
3.包含纯虚函数的类 叫做 抽象类
4.抽象类不允许实例化对象,否则报错
5.子类中必须重写抽象类的纯虚函数,否则报错
6.抽象类虽然不能实例化对象,但可以通过抽象类的指针或引用指向子类的对象来实现多态的特性。
例:
#include <iostream>
using namespace std;
class Animal{
private:
int hight;
int weight;
public:
Animal(){}
Animal(int h, int w):hight(h),weight(w){}
virtual void animal_eat() = 0;//纯虚函数
};
class Tiger:public Animal{
private:
string color;
public:
Tiger(){}
Tiger(int h,int w,string c):Animal(h,w),color(c){}
void animal_eat(){//子类必须重写抽象类中所有的纯虚函数
cout<<"吃 肉"<<endl;
}
};
class Sheep:public Animal{
private:
string color;
public:
Sheep(){}
Sheep(int h, int w, string c):Animal(h,w),color(c){}
void animal_eat(){//每个子类都必须重写抽象类中所有的纯虚函数
cout<<"吃 草"<<endl;
}
};
void infomation(Animal &x){
x.animal_eat();
}
int main(int argc, const char *argv[])
{
//Animal a1(10,20);//抽象类不能直接实例化对象
Tiger t1(10,20,"黄色");
Sheep s1(15,25,"白色");
infomation(t1);
infomation(s1);
return 0;
}