初始C++之缺省参数 函数重载 引用

初始C++之缺省参数 函数重载 引用&

文章目录

  • 初始C++之缺省参数 函数重载 引用&
    • 一、缺省参数
      • 1.1 缺省参数的定义
      • 1.2 缺省参数的分类
      • 1.3 注意事项
    • 二、 函数重载
      • 2.1 函数重载的定义
      • 2.2 参数个数不同
      • 2.3 参数类型不同
      • 2.4 类型顺序不同
      • 2.5 为什么C语言不支持函数重载
    • 三、引用 &
      • 3.1 引用的定义
      • 3.2 引用的特性
      • 3.3 引用的权限
      • 3.4 引用和指针的区别

一、缺省参数

1.1 缺省参数的定义

定义:缺省参数是指在声明或定义函数时,给函数参数指定一个缺省值,再调用函数时,如果没有指定实参,则采用形参的缺省值,否则则使用指定的实参

示例:

void Func1(int a = 10)
{cout << a << endl;
}int main()
{Func1();//不指定传参,则打印缺省值Func1(100);//指定传参,打印指定值return 0;
}

代码运行结果:

10
100

1.2 缺省参数的分类

• 半缺省参数

半缺省参数:指的是在函数的声明或定义中,只有部分参数指定了缺省值

示例:

void Func2(int a,int b = 20,int c = 30)
{cout <<"a = " << a << endl;cout <<"b = " << b << endl;cout <<"c = " << c << endl;
}int main()
{Func2(50);//半缺省参数,指指定a的值return 0;
}

• 全缺省参数

全缺省参数:指的是在函数的声明或定义中,给所有参数都指定了缺省值

示例:

void Func3(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
int main()
{Func3();//不指定值,打印缺省值return 0;
}

1.3 注意事项

1. 缺省参数只能从左往右给,不能间隔的给
2. 缺省参数不能在函数定义或函数声明中同时出现(如果同时出现两个不同的缺省值,编译器不知道该使用哪一个)
3. 缺省值必须是常量或者全局变量
4. C语言不支持缺省参数(编译器不支持)

二、 函数重载

2.1 函数重载的定义

函数重载:是函数的一种特殊情况,在C++中,同一个作用域内,可以声明几个功能类似的同名函数,这些函数的参数列表(参数个数,类型,类型顺序)不同

2.2 参数个数不同

#include <iostream>
using namespace std;void Func()
{cout << "Func()" << endl;
}void Func(int a)
{cout << "Func(int a)" << endl;
}
int main()
{Func();Func(10);return 0;
}

2.3 参数类型不同

#include <iostream>
using namespace std;// 1. 参数类型不一样
void Swap(int* px, int* py)
{int tmp = *px;*px = *py;*py = tmp;cout << "Swap(int* px, int* py)" << endl;cout << "a = " << *px << "b = " << *py << endl;
}void Swap(double* px, double* py)
{double tmp = *px;*px = *py;*py = tmp;cout << "Swap(double* px, double* py)" << endl;cout << "a = " << *px << "b = " << *py << endl;
}
int main()
{int a = 10, b = 20;double c = 10.6,d = 30.5;Swap(&a,&b);Swap(&c,&d);return 0;
}

2.4 类型顺序不同

void f(int a, char b)
{cout << "f(int a, char b)" << endl;
}
void f(char a, int b)
{cout << "f(char a, int b)" << endl;
}
int main()
{f(10, 'a');f('a', 10);return 0;
}

2.5 为什么C语言不支持函数重载

在函数定义和声明分离的情况下,在经过编译之后,在链接的时候,编译器会通过函数名来找到函数的地址,而函数的地址,在函数定义中的第一句指令的地址(类似与数组的地址是数组第一个元素的地址),在C语言中,链接时,是直接通过函数名来查找函数的地址的,比如有一个Add(int a,int b)函数,不同的编译器有不同的函数名修饰规则,假设是直接使用Add这个函数名来找到他的定义,所以C语言不支持重载,而在C++中会使用修饰之后的函数名查找,假设是 _Z3Addii 来查找,由于参数列表的不同,可以区分出不同的重载函数,所以C++中支持函数重载

简单来说就是,C语言是直接通过函数名来查找,所以不支持重载
而C++中是通过修饰后的函数名来查找(不同参数列表修饰出来的名字不同),可以区分出来,所以支持重载

三、引用 &

3.1 引用的定义

引用:引用不是定义一个新的变量,是给一个已经存在的变量取一个别名,编译器不会为引用变量开辟空间,它和被引用的变量公用一块内存空间

示例:

#include <iostream>
using namespace std;int main()
{int a = 10;int& b = a;int& c = a;int& d = c;cout << a << " " << b << " " << c << endl;return 0;
}

代码运行结果:

10 10 10 10
引用的地址和值是和被引用变量一致的
在这里插入图片描述

3.2 引用的特性

TIPS:
1. 引用变量必须初始化
2. 一个变量可以有多个引用
3. 引用一旦指定一个变量,就不能改变
4. 引用必须和引用的变量是同一类型的

示例1:引用变量必须初始化

#include <iostream>
using namespace std;int main()
{int& a;return 0;
}

在这里插入图片描述

示例2:一个变量可以有多个引用

#include <iostream>
using namespace std;int main()
{int a = 10;int& b = a;int& c = a;return 0;
}

示例3:引用一旦指定一个变量,就不能改变

#include <iostream>
using namespace std;int main()
{int x = 10;int y = 20;int& b = x;b = y; //不是b变成y的别名 而是y给b赋值,由于b是x的别名,同时x值也改变了cout << x << endl; return 0;
}

代码运行结果:
20

示例4:引用必须和引用的变量是同一类型的

#include <iostream>
using namespace std;int main()
{int x = 10;double& y = x;return 0;
}

在这里插入图片描述

3.3 引用的权限

  1. 权限的平移
#include <iostream>
using namespace std;int main()
{int x = 10;int& y = x;return 0;
}
  1. 权限的缩小
#include <iostream>
using namespace std;int main()
{int x = 10;  const int& y = x;//从可以修改变成了只读return 0;
}
  1. 权限的放大
#include <iostream>
using namespace std;int main()
{const int x = 10;int& y = x; //x只读,y变成x的别名,x变成了可读可写//权限的放大 不可以return 0;
}

3.4 引用和指针的区别

  1. 引用实际上是一个变量的别名,指针是存放一个变量的地址
  2. 引用必须初始化,指针可以不初始化
  3. 在语法上,引用不开辟空间,指针有开辟空间(从底层来看,引用实际上是有开空间的)
  4. 引用在引用了一个变量之后,不能再引用其他变量,指针在指向了一个变量,还可以更改指向,指向其他变量
  5. 没有NULL引用,但是有NULL指针
  6. sizeof计算大小时,引用占用为引用变量的类型的大小,指针则是固定4个字节(32位平台下)或 8个字节(64位平台下)
  7. 没有多级引用,有多级指针
  8. 引用指针用起来相对安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony南向开发案例:【智能保险柜】

样例简介 智能保险柜实时监测保险柜中振动传感器&#xff0c;当有振动产生时及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程接收智能保险柜的报警信息。后续可扩展摄像头等设备&#xff0c;实现对危险及时报警&#xff0c;及时处理&a…

探究 ChatGPT 的心脏--Transformer(基础知识第一篇)

Transformer 是 ChatGPT 的核心部分&#xff0c;如果将 AI 看做一辆高速运转的汽车&#xff0c;那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年发表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型&#xff0c;诞生之后便一统江湖&#xff0c;在…

项目存放在git上,在jenkins使用docker打包并推送到Ubuntu上运行

项目添加dockerfile 在需要打包的工程的根目录添加Dockerfile文件&#xff0c;文件内容&#xff1a; # 设置JAVA版本 FROM openjdk:8 # 指定存储卷&#xff0c;任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp# 拷贝运行JAR包 ARG JAR_FILE COPY ${JAR_FILE} app.jar…

蓝桥杯练习系统(算法训练)ALGO-958 P0704回文数和质数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 一个数如果从左往右读和从右往左读数字是完全相同的&#xff0c;则称这个数为回文数&#xff0c;比如898,1221,15651都是回文数。编写…

内核驱动更新

1.声明我们是开源的 .c 文件末尾加上 2.在Kconfig里面修改设备&#xff0c;bool&#xff08;双态&#xff09;-----》tristate&#xff08;三态&#xff09; 3.进入menuconfig修改为M 4.编译内核 make modules 也许你会看到一个 .ko 文件 5.复制到根目录文件下 在板子…

4.11作业

服务器端 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器端类 #include<QMessageBox> //消息对话框 #include<QTcpSocket> //客户端类 #include<QList> //链表容器QT_BEGIN_NAMESPACE namespace Ui { cla…

Pycharm远程连接服务器配置详解

背景&#xff1a; 相信很多人都遇到了这种情况&#xff0c;日常的开发和程序的验证都需要在linux环境下验证&#xff0c;而我们都是使用本地windows来进行开发或者脚本的编写&#xff0c;然后再push到远程仓库&#xff0c;再到linux环境下pull下来代码验证&#xff0c;这样每次…

CorelDRAW21.2.4中文最新官方和谐版下载

CorelDRAW是一款由加拿大Corel公司出品的平面设计软件&#xff0c;也被称为CDR。它是一款功能强大的矢量图形制作和排版软件&#xff0c;主要面向绘图设计师和印刷输出人员。该软件提供了矢量插图、页面布局、图片编辑和设计工具&#xff0c;广泛应用于排版印刷、矢量图形编辑及…

HWOD:密码强度等级

一、知识点 回车键的ASCII码是10 如果使用EOF&#xff0c;有些用例不通过 二、题目 1、描述 密码按如下规则进行计分&#xff0c;并根据不同的得分为密码进行安全等级划分。 一、密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 二、字母: 0…

NotePad++ 快速生成SQL IN (‘’,‘’)

sql In(‘’&#xff0c;‘’)这种形式 第一步&#xff1a;AltC 鼠标放在第一行最左边 第二步 CtrlH $代表行末 第三步 去掉每行换行符 换行可能是"\n" 或者"\r"或者"\r\n" 结果&#xff1a;

容错组合导航

在初始值正确的情况下&#xff0c;惯性导航短期精度较高&#xff0c;但是其误差随着时间是累计的。如果要提高惯性导航的长期精度&#xff0c;就必须提高惯性器件的精度和初始读准精度&#xff0c;这必将大大提高成本。 如果将惯性导航与其他导航系统适当地组合起来&#xff0c…

Java泛型中 T 和 ? 傻傻分不清楚

1.定义&#xff1a; JDK5.0后&#xff0c;Java提供了泛型。 泛型是一种在编译时提供类型安全的方式&#xff0c;允许程序员在定义类、接口和方法时使用类型参数。这样&#xff0c;可以在不损失类型安全的情况下&#xff0c;创建可重用的代码。 泛型有两种主要的使用形式&#x…

linux学习:栈

目录 顺序栈 结构 初始化一个空顺序栈 压栈 出栈 例子 十进制转八进制 链式栈 管理结构体的定义 初始化 压栈 出栈 顺序栈 顺序栈的实现&#xff0c;主要就是定义一块连续的内存来存放这些栈元素&#xff0c;同时为了方便管理&#xff0c; 再定义一个整数变量来代表…

2024中国(宁波)国际宠物用品博览会

2024中国(宁波)国际宠物用品博览会 People&Pet Fair 2024 专注2B交易&#xff0c;关注人宠发展&#xff0c;它经济&#xff0c;势不可挡! 时间&#xff1a;2024年11月14-16日 地点&#xff1a;宁波国际会展中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; …

水离子雾化壁炉与酒店大厅的氛围搭配

将水离子雾化壁炉与酒店大厅的氛围搭配是一个很好的主意&#xff0c;可以为大厅增添舒适、温馨的氛围&#xff0c;以下是一些建议&#xff1a; 迎宾区域&#xff1a;在酒店大厅的迎宾区域设置水离子雾化壁炉&#xff0c;作为客人抵达时的第一印象。壁炉的温馨效果可以让客人感到…

Java+BS +saas云HIS系统源码SpringBoot+itext + POI + ureport2数字化医院系统源码

JavaBS saas云HIS系统源码SpringBootitext POI ureport2数字化医院系统源码 医院云HIS系统是一种运用云计算、大数据、物联网等新兴信息技术的业务和技术平台。它按照现代医疗卫生管理要求&#xff0c;在特定区域内以数字化形式收集、存储、传递和处理医疗卫生行业的数据。通…

【应用】SpringBoot-自动配置原理

前言 本文简要介绍SpringBoot的自动配置原理。 本文讲述的SpringBoot版本为&#xff1a;3.1.2。 前置知识 在看原理介绍之前&#xff0c;需要知道Import注解的作用&#xff1a; 可以导入Configuration注解的配置类、声明Bean注解的bean方法&#xff1b;可以导入ImportSele…

异构超图嵌入的图分类 笔记

1 Title Heterogeneous Hypergraph Embedding for Graph Classification&#xff08;Xiangguo Sun , PictureHongzhi Yin , PictureBo Liu , PictureHongxu Chen , PictureJiuxin Cao , PictureYingxia Shao , PictureNguyen Quoc Viet Hung&#xff09;【WSDM 2021】 2 Co…

模拟移动端美团案例(react版)

文章目录 目录 概述 项目搭建 1.启动项目&#xff08;mock服务前端服务&#xff09; 2.使用Redux ToolTik(RTK)编写store(异步action) 3.组件触发action并渲染数据 一、渲染列表 ​编辑 二、tab切换类交互 三、添加购物车 四、统计区域功能实现 五、购物车列表功能实现 六、控制…

Leetcode算法训练日记 | day23

一、修剪二叉搜索树 1.题目 Leetcode&#xff1a;第 669 题 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff…