纯虚函数定义写法
virtual void eat() = 0;
子类必须重写父类的纯虚函数,才能定义对象。
#include <iostream>
using namespace std;
//父类-抽象类
class CA {
public:
//变为纯虚函数,在父类可以不用定义
virtual void eat() = 0;
};
//子类-具体类
class CDog :public CA {
public:
//重写父类的纯虚函数
virtual void eat()
{
cout << "狗吃骨头" << endl;
}
};
int main()
{
CA* pa = new CDog;
pa->eat();
system("pause");
return 0;
}
父类-抽象类,作为一个抽象的接口,不能定义对象,类中包含纯虚函数称为抽象类。
CA ca;//错误
想要调用父类的函数,需要在类外写出定义,并通过静态绑定的方式去调用。
#include <iostream>
using namespace std;
//父类-抽象类
class CA {
public:
//变为纯虚函数,在父类可以不用定义
virtual void eat() = 0;
};
void CA::eat() {
cout << "1" << endl;
}
//子类-具体类
class CDog :public CA {
public:
//重写父类的纯虚函数
virtual void eat()
{
cout << "狗吃骨头" << endl;
}
};
int main()
{
CA* pa = new CDog;
pa->CA::eat();//静态绑定 调用父类的函数
system("pause");
return 0;
}
多态的缺点
1、效率:虚函数调用流程复杂,程序整体运行效率会拉低。
2、空间:虚函数指针,在继承多态下,虚函数列表在各个继承链其大小只增不减。
3、安全:如果一个函数为私有的函数,尽量不要成为虚函数,如果一个函数为虚函数,即使变为私有函数意义不大。