纯虚函数和抽象类
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数
virtual 返回值类型 函数名 (参数列表)= 0 ;
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点:
-
无法实例化对象
-
子类必须重写抽象类中的纯虚函数,否则也属于抽象类
class Animal
{
pubilc:
virtual void speak() = 0;//纯虚函数
}
class cat:pubilc Animal
{
void speak(){//子类必须重写父类纯虚函数,不然也是抽象类
cout << "喵喵叫" << endl;
}
}
class dog:pubilc Animal
{
//void speak(){//子类必须重写父类纯虚函数,不然也是抽象类
// cout << "汪汪叫" << endl;
//}
}
int main(){
Animal* p = NULL;
p = new Animal;//报错,抽象类不可以实例对象
p = new cat;//子类重写父类纯虚函数,不是抽象类可以实例对象
p = new dog;//报错,子类没有重写父类纯虚函数,也是抽象类不可以实例对象
}