虚函数(用于实现多态)
虚函数创建的时候会生成一个v表,即函数映射表,帮我程序查找应该使用那个覆写函数。
使用虚函数会有两个消耗:
- 空间,我们需要一个存储虚函数表的空间
- 时间(性能),在调用函数时,我们需要遍历一遍虚函数表来查找调用那个函数。
纯虚函数(用于提供必须实现的接口)
纯虚函数是虚函数的一种特殊形式,该函数用virtual关键字定义,没有具体的实现。包含纯虚函数的类叫做虚基类,该类因为纯虚函数没有实际定义所以不能进行实例化。
纯虚函数和java中的接口类似,但是在c++中就是一个特殊的类。纯虚函数的主要作用是当我们想要一组类实现时必须包含某一个功能,就可以把这个功能当成一个必须实现的接口定义为纯虚函数。那么子类的定义必须对这个函数进行实现。
例子:
#include <iostream>
//虚基类
class VirtualBase {
public:
virtual void ShowName() = 0;//纯虚函数
};
class SubCalss : public VirtualBase{
public:
void ShowName() override{//对父类的纯虚函数进行实现,否则编译错误,无法生成实例对象
std::cout << m_name << std::endl;
}
public:
char* m_name{nullptr};
};
int main()
{
SubCalss new_instance;
char* ch{ nullptr };
std::cin.get();
}