1、虚函数
虚函数是基类中使用关键字virtual声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
#include<iostream>
using namespace std;
class Shape
{
public:
virtual void doing()
{
cout << "Parent class" << endl;
}
};
class Child1: public Shape
{
public:
void doing()
{
cout << "Child1 class" << endl;
}
};
class Child2: public Shape
{
public:
void doing()
{
cout << "Child2 class" << endl;
}
};
int main()
{
Shape *shape;
Child1 c1;
Child2 c2;
shape = &c1;
shape->doing();
shape = &c2;
shape->doing();
return 0;
}
上面代码被运行时,结果
Child1 class
Child2 class
2、纯虚函数
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。
class Shape
{
public:
virtual int doing() = 0;
};
= 0, 告诉编译器,函数没有主体,上面的虚函数是纯虚函数。
3、用法
虚函数只能借助于指针或者引用来达到多态的效果。
定义一个函数为虚函数,不代表函数为不被实现函数,而是为了允许用基类的指针来调用子类的这个函数。
定义一个纯虚函数代表这个函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承基类的派生类必须实现这个函数。
使用情形
当定义动物作为一个基类的时候,如果想规范派生类动物的特征时,使用纯虚函数。
#include<iostream>
using namespace std;
class Animal
{
public:
virtual void feature() = 0;
};
class Dog: public Animal
{
public:
void feature()
{
cout << "狗的特征" << endl;
}
};
class Cat: public Animal
{
public:
void feature()
{
cout << "猫的特征" << endl;
}
};
class Bear: public Animal
{
public:
void feature()
{
cout << "熊的特征" << endl;
}
};
int main()
{
Animal *_feature[3];
_feature[0] = new Dog;
_feature[1] = new Cat;
_feature[2] = new Bear;
for(int i = 0; i < 3; i++){
_feature[i]->feature();
}
return 0;
}
上面代码被运行时,结果
狗的特征
猫的特征
熊的特征