首页 > 编程语言 >C++中函数重载和重写的区别是什么?

C++中函数重载和重写的区别是什么?

时间:2023-04-28 19:23:37浏览次数:36  
标签:函数 示例 作用域 C++ 函数参数 重载 重写

  函数重载:

    利用命名矫正(name mangling)技术,在编译时把函数名加上参数的首字母来区分同名函数。

    需要满足3个条件:

      1.同一个作用域下

      2.函数名相同

      3.函数参数类型不同,参数个数不同,参数顺序不同

 

    示例:    

 1 //函数重载需要函数都在同一个作用域下
 2 void func()
 3 {
 4     cout << "func 的调用!" << endl;
 5 }
 6 void func(int a)
 7 {
 8     cout << "func (int a) 的调用!" << endl;
 9 }
10 void func(double a)
11 {
12     cout << "func (double a)的调用!" << endl;
13 }
14 void func(int a ,double b)
15 {
16     cout << "func (int a ,double b) 的调用!" << endl;
17 }
18 void func(double a ,int b)
19 {
20     cout << "func (double a ,int b)的调用!" << endl;
21 }
22 
23 //函数返回值不可以作为函数重载条件
24 //int func(double a, int b)
25 //{
26 //    cout << "func (double a ,int b)的调用!" << endl;
27 //}
28 
29 
30 int main() {
31 
32     func();
33     func(10);
34     func(3.14);
35     func(10,3.14);
36     func(3.14 , 10);
37     
38     system("pause");
39 
40     return 0;
41 }

 

 

 

  函数重写:

    在基类的函数前加virtual关键字,在派生类重写改函数,运行时根据对象的实际类型来调用相应的函数。

    重写需要满足:

      1.函数返回值相同

      2.函数名相同

      3.函数参数相同

      4.但函数体不同

  示例:  

 1 class Animal
 2 {
 3 public:
 4     virtual void speak()
 5     {
 6         cout << "动物在说话" << endl;
 7     }
 8 };
 9 
10 class Cat :public Animal
11 {
12 public:
13     void speak()  //重写,返回值相同,函数名相同,函数参数相同
14     {
15         cout << "小猫在说话" << endl;
16     }
17 };
18 
19 
20 void test01()
21 {
22     Cat cat;
23     DoSpeak(cat);
24 }
25 
26 
27 int main() {
28 
29     test01();
30 
31     system("pause");
32 
33     return 0;
34 }

 

标签:函数,示例,作用域,C++,函数参数,重载,重写
From: https://www.cnblogs.com/py369/p/17362974.html

相关文章

  • Java重写源码中的方法
    重写步骤:1.找到你所要重写的方法的所在类,查看其中的路径;2.在我们的src目录下新建一个同包名同类名的类;3.将jar包中的重写方法所在类的所有代码复制到我们新建的同包名同类名的类中;4.在我们新建的同包名同类名的类中修改对应的方法中的代码,注意要保持方法中的参数不要发生改变,也......
  • c++中如何强制访问类的保护(protected)/私有(private)性质的成员函数和成员变量
    在使用第三方代码库时,有时候需要访问某个类的函数或者变量,但该对象是保护或者私有的,导致无法正常访问。其实,通过一个简单的友元friend类或函数,可以轻松突破编译器的限制。下面是代码实例。假设第三方库有person类,定义如下。classPerson{private:intage=18;}那么如果强......
  • C++中关于默认构造函数(Default Constructor)
    读<<深度探索C++对象模型>>,第二章介绍了默认构造函数,自觉知识点虽基础但是很是被忽略,故作此文记录.关于基础概念不做介绍,先看代码#include<stdio.h>#include<string>classSample{public:intintVal;};classFoo{public:Foo(inta=1000):int......
  • springcloud gateway filter 重写response
     importorg.reactivestreams.Publisher;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.gateway.filter.GatewayFilterChain;importorg.springframework.cloud.gateway.filter.GlobalFilter;importorg.springfram......
  • 二分查找算法讲解及其C++代码实现
    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。算法描述:首先确定数组的中间位置mid=(left+right)/2;然后将要查找的值key与中间位置的值进行比较;如果key等于中间位置的值,则查找成功,返回mid;如果key小于中间位置的值,则在......
  • C++拟合多项式
     #include<iostream>#include<vector>#include<cmath>#include<ctime>//eigen核心部分#include<Eigen/Core>//稠密矩阵的代数运算(逆、特征值等)#include<Eigen/Dense>usingnamespaceEigen;usingnamespacestd;///<summary>///拟......
  • Vulkan Support Check and Dynamic Loader C++ code sample
    很多时候不想静态依赖VulkanSDK所提供的静态库,因为会遇到一些过早的电脑不支持vulkan,那么就需要使用动态加载vulkan-1.dll(forWindows)或libMoltenVK.dylib(forMacOS)的方式进行判断了。VulkanSDK提供了相关头文件实现可以做到相关功能,仅需要include一下头文件`vulkan/vulkan.hpp......
  • C/C++ 自定义结构体直接用自定义结构体=赋值
    自定义结构体中没有管理堆空间对象的指针structst_t{inta;shortb;charc;chars[128]={0};};对比使用=和memcpy的汇编代码 结论 两者均调用了memcpy,结构体中不带指针(管理堆空间),可以直接使用浅拷贝,不过个人倾向后者,显式调用memcpy。......
  • c++打卡练习(19)
    1.问题描述相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8x8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我......
  • 打卡 C++类与对象定义一个日期类 N天以后 - C/C++ 操作符重载
    改造练习13-1(日复一日)中的Date类并提交,使其可以与一个整数n相加或相减,得到该日期N天后/前的日期。提示:请参考题目(日复一日)中的Date类实现;注意考虑闰月;整数n的取值范围为[1,10000]。裁判测试程序样例: #include<iostream>#include<string>#include<assert.h>usingn......