C++中什么是虚函数

 更新时间:2025年01月27日 09:44:46   作者:思wu邪  
虚函数是C++中的一种机制,允许在基类中声明一个函数,并在派生类中对其进行重新定义,从而实现多态性,虚函数通过基类指针或引用调用派生类的函数,实现运行时绑定,虚函数的关键是使用`virtual`关键字修饰函数声明,并且虚函数可以有默认实现,也可以是纯虚函数

虚函数是指:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,即被virtual关键字修饰的成员函数;格式为“virtual 函数返回类型 函数名(参数表) {函数体}”。
在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:;实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

class Animal
{
public:
	//Speak函数就是虚函数
	//函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。
	virtual void speak()
	{
		cout << "动物在说话" << endl;
	}
};

class Cat :public Animal
{
public:
	void speak()
	{
		cout << "小猫在说话" << endl;
	}
};

int main() {
	Animal* a = new Cat(); //
	a->speak();//小猫在说话
	Animal b = Cat();
	b.speak();//动物在说话,不明白这里为什么没有发生多态
	system("pause");
	return 0;
}

这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。 虚函数只能借助于指针或者引用来达到多态的效果。

到此这篇关于什么是虚函数的文章就介绍到这了,更多相关什么是虚函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章带你了解C语言二分查找的简单应用

    一篇文章带你了解C语言二分查找的简单应用

    这篇文章主要介绍了二分查找算法在C语言程序中的使用示例,文中最后提到了使用二分查找法一个需要注意的地方,需要的朋友可以参考下
    2021-08-08
  • 利用C语言实现简易版扫雷

    利用C语言实现简易版扫雷

    这篇文章主要为大家详细介绍了C语言实现简易版扫雷,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • C语言中qsort函数用法及用冒泡排序实现

    C语言中qsort函数用法及用冒泡排序实现

    qsort函数是由C语言提供的标准库函数, 它的实现思想是快速排序。这篇文章主要介绍了C语言中qsort函数用法及用冒泡排序实现qsort函数功能,需要的可以参考一下
    2022-10-10
  • C++线性时间的排序算法分析

    C++线性时间的排序算法分析

    这篇文章主要介绍了C++线性时间的排序算法分析,是非常经典的非比较排序算法,对于C++程序员有很大的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • 在C++中自定义宏的简单方法

    在C++中自定义宏的简单方法

    这篇文章主要介绍了在C++中自定义宏的简单方法,作者建议使用类似定义函数一样的方法来定义宏,需要的朋友可以参考下
    2015-07-07
  • Visual Studio Code上添加小程序自动补全插件的操作方法

    Visual Studio Code上添加小程序自动补全插件的操作方法

    这篇文章主要介绍了Visual Studio Code上添加小程序自动补全插件的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 详解C++实现链表的排序算法

    详解C++实现链表的排序算法

    链表排序思想和数组排序类似,区别就是数组遍历容易,数据交换也容易;链表(单项链表)只能一个方向遍历,不能逆序遍历,且不能随机访问,所以排序比较麻烦。本文将详细介绍链表排序的方式,并且用C++来实现
    2021-06-06
  • C语言双向链表实现根据使用频率安排元素位置的功能实例代码

    C语言双向链表实现根据使用频率安排元素位置的功能实例代码

    这篇文章主要介绍了C语言双向链表实现根据使用频率安排元素位置的功能实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • C语言工程文件该如何写(以三子棋游戏为例)

    C语言工程文件该如何写(以三子棋游戏为例)

    工程上写代码应分为多个文件,那么你知道C语言工程文件该如何写吗,本文就以以三子棋游戏为例,介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++中Boost的转换函数

    C++中Boost的转换函数

    这篇文章介绍了C++中Boost的转换函数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论