在类的继承过程中,常常会遇到类中的函数同名的情况。此时,子类会对父类的重名函数进行重写。但是在更多的情况下我们不会就这样直接对父类的函数进行重写,更多的是在父类被重写的函数类型前加上virtual关键字来进行标识。
被virtual修饰词修饰的函数为虚函数,而且虚函数只能够在类中进行申明。且,虚函数的申明和定义中至少有一个存在virtual关键字即可。如下:
#include <iostream>
using namespace std;
class Father{
public:
Father(){}
virtual void show(){
cout << "hello Father" << endl;
}
};
class Son :public Father{
public:
Son(){}
void show(){
cout << "hello Son" << endl;
}
};
int main(){
Father father;
father.show();
Son son;
son.show();
system("pause");
return 0;
}
在C++中,除了虚函数外,还存在纯虚函数的概念。
虚函数存在实现,但是纯虚函数不存在实现。纯虚函数更多的像是一种标识,也仅仅是作为一种标识。作为标识,是不需要对其进行任何实例化的操作的。而且,子类是无法直接调用父类的纯虚函数的。对于纯虚函数,子类可以进行重写,其作用就是作为标识给子类进行重写。除此之外,存在纯虚函数的类叫做抽象类,抽象类是无法直接实例化对象。
如下:
#include <iostream>
using namespace std;
class Father{
public:
Father(){}
virtual void show() = 0;
};
class Son :public Father{
public:
Son(){}
void show(){
cout << "hello Son" << endl;
}
};
int main(){
Son son;
son.show();
system("pause");
return 0;
}