c++重载函数和虚函数(重写)为什么分别在编译和运行时候确定

您所在的位置:网站首页 virtual函数一定要重写吗 c++重载函数和虚函数(重写)为什么分别在编译和运行时候确定

c++重载函数和虚函数(重写)为什么分别在编译和运行时候确定

2023-07-02 13:48| 来源: 网络整理| 查看: 265

函数调用的本质:

函数调用实际上是执行函数体中的代码函数体是内存中的一个代码段函数名代表改代码段的首地址,函数执行时就从这里开始

所以执行一个函数的时候,需要知道具体的函数地址,才能执行函数

重载、重写和隐藏的区别

(1)重载(静态联编)指的是同一个名字的函数,必须具有不同的参数列表(参数类型、个数),可以有不同的返回类型,根据参数列表和返回类型决定调用哪一个函数;(函数名可以相同,但是参数不能完全相同,至于返回值,不影响重载。所以函数倾轧不使用返回值信息)

(2)重写(覆盖,动态联编)指的是,派生类中的函数重写了基类中的虚函数,重写的基类的中函数必须被声明为virtual,并且返回值,参数列表和基类中的函数一致;

(3)隐藏是指,派生类中的同名函数把基类中的同名函数隐藏了,即基类同名函数被屏蔽掉;此时基类函数不能声明为virtual。

实际上在c++中,无论重载还是重写,最终都会生成多个不同的函数,这些函数虽然在代码上看起来名字相同,实际上是名字不同的多个函数,对于重载,c++使用函数倾轧技术,在ide看来,重载的不同函数的参数和返回值都会使得经过函数倾轧后表现的不同,重写更不必说,不同虚函数表指向的函数显然不同。

对于重写,其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致,所以在代码编写过程中,我们的调用代码完全相同:

#include using namespace std; class A { public: A() { cout cout cout cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3