纯虚函数:不能实例化对象,可以做指针和引用,拥有纯虚函数的类是抽象类。
作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。
声明格式:virtual 类型 函数名(参数列表)= 0
(1)纯虚函数没有函数体;
(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;
(3)这是一个声明语句,最后有分号。
#include<iostream>
#include<string>
using namespace std;
class Animal
{
public:
Animal(std::string name) :mname(name){}
virtual void bark() = 0; //声明为纯虚函数
protected:
std::string mname;
};
class Dog :public Animal
{
public:
Dog(std::string name) :Animal(name){}
void bark()
{
std::cout << mname << " this is dog !" << std::endl;
}
};
class Cat :public Animal
{
public:
Cat(std::string name) :Animal(name){}
void bark()
{
std::cout << mname << " this is cat !" << std::endl;
}
};
int main()
{
Animal* pa = new Dog("dog");
Dog* pd = dynamic_cast<Dog*>(pa);
Animal* pb = new Cat("cat");
pa->bark();
pb->bark();
return 0;
}
当在main函数中试图执行
Animal p;
构造一个Animal 类型的对象p时,程序会提醒错误,Animal类中有一个纯虚函数 virtual void bark。