虚函数
定义:虚函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是派生类的函数,所以被成为"虚"函数。父类中提供虚函数的实现,为子类提供默认的函数实现,子类可以重写父类的虚函数实现子类的特殊化。
写法:
class A
{
public:
virtual void foo()
{
cout << "基类的虚函数" << endl;
}
};
class B :public A
{
public:
void foo()
{
cout << "子类重写" << endl;
}
};
纯虚函数
定义:纯虚函数是在基类中声明的虚函数,它在基类中只有声明,没有定义,但要求任何派生类都要定义自己的实现方法,是对派生类的一种约束
写法:
class Animal
{
public:
virtual void Say() = 0; //基类声明纯虚函数 在虚函数后面加 =0
};
class Dog :public Animal
{
public:
void Say() //派生类中重写基类的纯虚函数
{
cout << "这是dog" << endl;
}
};
抽象类
动物作为一个基类可以派生出狗、猫等派生类,但动物本身生成对象明显不合常理。这时就出现了抽象类,抽象类就是是一种不能实例化的类。
形成场景:
1、基类中含有纯虚函数
2、派生类中没有定义基类的全部纯虚函数