拥有纯虚函数的类就是一个抽象类,不能生成对象
(1)抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
(2)C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
(3)C++中的纯虚函数也是一种“运行时多态”。
简单使用:
class Animal
{
public:
Animal(std :: string name) :mname(name){}
virtual void bark() = 0;
~Animal(){}
protected:
std::string mname;
};
class Dog :public Animal
{
public:
Dog(std::string name) :Animal(name){}
void bark()
{
std::cout << mname << " wang wang wang!" << std::endl;
}
};
class Cat : public Animal
{
public:
Cat(std::string name) :Animal(name){}
void bark()
{
std::cout << mname << " miao miao miao!" << std::endl;
}
};
int main()
{
Cat* pc = new Cat("cat");
Dog* pd = new Dog("dog");
int* p11 = (int*)pc;
int* p22 = (int*)pd;
**int tmp = *p11;
*p11 = p22;
p22 = tmp;
pc->bark();
pd->bark();
return 0;
}
上面这三行代码是交换了pc和pd中虚表的指向,使得Cat wang wang wang ,Dog miao miao miao