C++ 纯虚函数详解

 更新时间:2021年09月28日 10:22:51   作者:过百  
本文主要介绍了C++ 纯虚函数详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

虚函数 

在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生类实例中继承自该基类的所有成员函数,且若有重写,调用的都是重写后的函数。

纯虚函数

声明纯虚函数可使当前类变成抽象类,禁止该类被实例化,并要求其非抽象类的派生类必须实现该函数。

下面展示虚函数和纯虚函数的代码示例,注意观察注释内容:

class Base
{
public:
	virtual void print() = 0;//纯虚函数,可以有函数体,可实例化的派生类必须重写它
	virtual void play() {//虚函数,有函数体,若派生类没有重写它,就原样继承下来
		cout << "Base play!" << endl;
	}
	virtual ~Base() = 0;//纯虚析构函数,必须要有函数体
	//virtual ~Base(){}	//很多情况下,基类的虚函数都会有函数体,将析构函数声明为纯虚函数是一种抽象化基类、不许其实例化的一种方法。
};
void Base::print() {
    //被声明为纯虚函数,仍可以有函数体
    //但派生类若想实例化,必须重写纯虚函数,派生类中可以调用基类有函数体的纯虚函数(Base::print())
	cout << "Base print!" << endl;
}
Base::~Base(){
    //被声明为纯虚析构函数,根据C++类的规则,因为其派生类析构函数会调用基类的析构函数,所以必须有函数体,否则不知道你执行了啥
}

1、纯虚函数对类最大的束缚就是:类中一旦出现纯虚函数,就不可实例化了;

2、纯虚函数还是可以有函数体,只不过最终还是要被派生类重写,在派生类的函数中可以调用基类中有函数体的纯虚函数;

3、为使派生类能完全释放资源,基类析构函数必须声明为虚函数,否则,在用基类指针new一个派生类对象后,delete该指针就只能回收与基类相关的资源,造成内存泄漏;

4、纯虚析构函数必须要有函数体,根据C++析构函数的调用规则,派生类会调用基类析构函数,如果基类析构函数没有函数体会造成函数调用失败而报错,这是纯虚析构函数与普通纯虚函数不同之处。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • C++中内存池的简单原理及实现详解

    C++中内存池的简单原理及实现详解

    内存池的思想是,在真正使用内存之前,预先申请分配一定数量、大小预设的内存块留作备用。本文主要来和大家聊聊内存池的简单原理及实现,希望对大家有所帮助
    2023-03-03
  • C++详细讲解图的遍历

    C++详细讲解图的遍历

    图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历
    2022-05-05
  • c++11&14-STL要点汇总

    c++11&14-STL要点汇总

    这篇文章主要介绍了c++11&14中的STL要点,文中代码简单易懂,方便大家更好的学习参考,感兴趣的朋友可以了解下
    2020-06-06
  • C语言结构体指针的具体使用

    C语言结构体指针的具体使用

    结构体指针是一种非常有用的数据类型,它可以让我们更方便地操作结构体,本文主要介绍了C语言结构体指针的具体使用,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • 探究一下C语言生成随机数的奥秘

    探究一下C语言生成随机数的奥秘

    C语言中生成随机数是一项非常重要的功能,因为许多现代应用程序需要使用随机数。本文就来带大家一起探究一下C语言生成随机数的奥秘吧
    2023-03-03
  • MFC实现简单计算器

    MFC实现简单计算器

    这篇文章主要为大家详细介绍了MFC实现简单的计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言实现简单的推箱子小游戏

    C语言实现简单的推箱子小游戏

    这篇文章主要为大家详细介绍了C语言实现简单的推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C语言简易实现扫雷小游戏

    C语言简易实现扫雷小游戏

    这篇文章主要为大家详细介绍了C语言简易实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++ 实现汉诺塔的实例详解

    C++ 实现汉诺塔的实例详解

    这篇文章主要介绍了C++ 实现汉诺塔的实例详解的相关资料,这里主要说明C++中数据结构的递归的应用,需要的朋友可以参考下
    2017-08-08
  • c++实现十进制转换成16进制示例

    c++实现十进制转换成16进制示例

    这篇文章主要介绍了c++实现十进制转换成16进制示例,需要的朋友可以参考下
    2014-05-05

最新评论