C++入门基础(内容太干,噎住了)

news2024/9/21 4:38:15

 

文章目录

1.缺省参数

2.函数重载

2.1重载条件:

1.参数类型不同

2.参数个数不同

3.参数类型顺序不同 

2.2不做重载条件情况:

1.返回值相同时

2.当全缺省遇见无参数

3.引用

3.1引用特性:

3.2引用的使用


1.缺省参数

1.缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
using namespace std;

void sui(int a=0) {//int a=0为默认传参
	cout << a << endl;
}

int main()
{
	sui();//没有传参时,使用默认参数
	sui(10);//有传参时,使用指定传参
return 0;
}
输出:0
     10

2.全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值

3.带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
using namespace std;
// 全缺省
void sui1(int a = 10,int b = 20,int c = 30) {
	//int a = 10,int b = 20,int c = 30为默认参数
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
// 半缺省,一定有传参
void sui2(int a , int b = 20, int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

void sui3(int a = 10, int b , int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

//从右往左依次连续缺省,不能间隔跳跃给缺省值,如sui4(10, ,20);是会报错的
void sui4(int a, int b = 10, int c) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

int main()
{
	sui1();
	sui1(1);
	sui1(1,2);
	sui1(1,2,3);

	//sui2();错误的,半缺省一定有传参
	sui2(10);
	sui2(10,20);
	sui2(10,20,30);

	//sui4(10, ,20);
    return 0;
}

4.函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省值

// Stack.h
#include <iostream>
#include <assert.h>
using namespace std;
typedef int STDataType;
typedef struct Stack
{
STDataType* a;
int top;
int capacity;
}ST;
void STInit(ST* ps, int n = 4);

// Stack.cpp
#include"Stack.h"
// 缺省参数不能声明和定义同时给

//void STInit(ST* ps, int n = 4)会报错,表示重定义默认参数

void STInit(ST* ps, int n)
{
assert(ps && n > 0);
ps->a = (STDataType*)malloc(n * sizeof(STDataType));
ps->top = 0;
ps->capacity = n;
}

// test.cpp
#include"Stack.h"
int main()
{
ST s1;
STInit(&s1);
// 确定知道要插⼊1000个数据,初始化时⼀把开好,避免扩容
ST s2;
STInit(&s2, 1000);
return 0;
}

程序报错:重定义默认参数

2.函数重载

C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态 为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。

2.1重载条件:

1.参数类型不同

cpp会根据函数中参数类型进行函数的匹配

#include<iostream>
using namespace std;

// 1、参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

int main() {
	//跳入int Add(int left, int right)
	Add(10, 20);
	//跳入double Add(double left, double right)
	Add(10.1, 20.2);

	return 0;
}

2.参数个数不同

cpp会根据函数中参数类个数进行函数的匹配

#include<iostream>
using namespace std;

// 2、参数个数不同
void sui()
{
	cout << "sui()" << endl;
}
void sui(int a)
{
	cout << "sui(int a)" << endl;
}


int main() {

	//跳入void sui()
	sui();
	//跳入void sui(int a)
	sui(10);

	return 0;
}

3.参数类型顺序不同 

#include<iostream>
using namespace std;


// 3、参数类型顺序不同
void sui(int a, char b)
{
	cout << "sui(int a,char b)" << endl;
}
void sui(char b, int a)
{
	cout << "sui(char b, int a)" << endl;
}


int main() {

	sui(10, 'a');

	sui('a', 10);

	return 0;
}

2.2不做重载条件情况:

1.返回值相同时

// 返回值不同不能作为重载条件,因为调⽤时也⽆法区分
void sui()
{}

int sui()
{
 return 0;
}

2.当全缺省遇见无参数

// 下⾯两个函数构成重载
// f()但是调⽤时,会报错,存在歧义,编译器不知道调⽤谁
void sui()
{
cout << "sui()" << endl;
}

void sui(int a = 10)
{
cout << "sui(int a)" << endl;
}

3.引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 例如:水浒传中,江湖上人称"黑旋风";林冲,外号豹子头;

类型&引用别名 = 引用对象;     注:这里的&与取地址操作符一致

#include<iostream>
using namespace std;

int main() {

	int a = 10;
	// 引⽤:b和c是a的别名
	int& b = a;
	int& c = a;
	// 也可以给别名b取别名,d相当于还是a的别名
	int& d = b;
	// 这⾥取地址我们看到是⼀样的
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	cout << &d << endl;

	return 0;
}

3.1引用特性:

  • 引用在定义时必须初始化
  • 一个变量可以有多个引用
  • 引用一旦引用一个实体,再不能引用其他实体
#include<iostream>
using namespace std;
int main()
{
int a = 10;

// 编译报错:“ra”: 必须初始化引⽤
//int& ra;

int& b = a;
int c = 20;

// 这⾥并⾮让b引⽤c,因为C++引⽤不能改变指向,
// 这⾥是⼀个赋值
b = c;

cout << &a << endl;
cout << &b << endl;
cout << &c << endl;
return 0;

}

3.2引用的使用:

引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被 引用对象。
引用传参跟指针传参功能是类似的,引用传参相对更方便一些。
引用返回值的场景相对比较复杂,我们在这里简单讲了一下场景,还有一些内容后续类和对象章节中会继续深入讲解。
引用和指针在实践中相辅相成,功能有重叠性,但是各有特点,互相不可替代。C++的引用跟其他语言的引用(如Java)是有很大的区别的,除了用法,最大的点,C++引用定义后不能改变指向, Java的引用可以改变指向。
一些主要用C代码实现版本数据结构教材中,使用C++引用替代指针传参,目的是简化程序,避开复杂的指针,但是很多同学没学过引用,导致一头雾水。

如交换函数: 

//swap(&x,&y);
//void Swap(int* rx, int* ry)
//{
//
//int* tmp = rx;
//rx = ry;
//ry = tmp;
//
//}

void Swap(int& rx, int& ry)
{

int tmp = rx;
rx = ry;
ry = tmp;

}

int main()
{

int x = 0, y = 1;
cout << x <<" " << y << endl;
Swap(x, y);
cout << x << " " << y << endl;
return 0;

}

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

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

相关文章

中庸就是五五开,各打五十大板吗

中庸指的是&#xff0c;人生行事应该把握一个度&#xff0c;既不过分&#xff0c;也无不及&#xff0c;以中为贵&#xff0c;以和为美。 中庸关键在于“中”&#xff0c;要求适中适度、恰如其分。 《论语•先进》中提到&#xff0c;有一次&#xff0c;子路问孔子&#xff0c;…

Springboot中使用Elasticsearch(部署+使用+讲解 最完整)

Elasticsearch&#xff1a;用于数据存储、计算和搜索 Mysql&#xff1a;擅长事务类型操作&#xff0c;可以确保数据的安全和一致性 Elasticsearch&#xff1a;擅长海量数据的搜索、分析、计算 基于这个特点我打算改造用户方面的功能&#xff0c;基于用户量比较多&#xff0c;…

电影《名侦探柯南:百万美元的五棱星》 观后感

上周看了电影《名侦探柯南&#xff1a;百万美元的五棱星》,个人觉得这可能是相对于柯南系列的重度粉丝来说是相当不错的&#xff0c;对于自己这个外行的人来说&#xff0c;可能有些故事背景并不了解&#xff0c;以及里边出场的人物并不熟悉&#xff0c;整体看下来觉得算是中规中…

复习Vue笔记

笔记来源于黑马程序员相关上课笔记 基于脚手架创建前端工程 环境要求 node.js&#xff1a;前端项目的运行环境&#xff08;相当于Java的运行环境JDK&#xff09; npm&#xff1a;JS的包管理工具/器 npm腾讯镜像&#xff1a;npm config set registry http://mirrors.cloud.te…

BaseCTF-Misc-Week2-WP

目录 1、二维码1-街头小广告 2、反方向的雪 3、黑丝上的flag 4、海上又遇了鲨鱼 5、Base?! 6、ez_crypto 7、前辈什么的最喜欢了 8、哇&#xff01;珍德食泥鸭 9、Aura 酱的旅行日记 I 10、Aura 酱的旅行日记 II 11、Aura 酱的旅行日记 III 12、Aura 酱的旅行日…

Docker镜像制作(使用GPU)

由于最近参加天池的大模型比赛&#xff0c;在复赛阶段需要制作并提交Docker进行模型的推理&#xff0c;因此在这里记录一下Docker制作的过程。 准备 featurize阿里云账号 由于需要使用GPU资源&#xff0c;因此选择了预装Docker的featurize服务器。 开通阿里云容器镜像服务 …

74HC595的用法与原理

DS/LDSI&#xff08;SER&#xff09;&#xff0c;串行数据输入引脚 OE/LEDN&#xff0c;输出使能控制脚&#xff0c;它是低电才使能输出&#xff0c;所以接GND RCK/LDSTR&#xff08;STCP&#xff09;&#xff0c;存储寄存器时钟输入引脚。上升沿时&#xff0c;数据从移位寄存器…

万万没想到!秋季里的这些水果,对帕金森治疗大有裨益!——蔡英丽医生

随着秋风轻拂&#xff0c;大地披上了一袭金黄色的外衣&#xff0c;这不仅是收获的季节&#xff0c;更是自然对人类健康的又一次慷慨馈赠。对于帕金森病患者而言&#xff0c;这个秋季尤为特别&#xff0c;因为大自然悄然间准备了五种神奇的秋季水果&#xff0c;它们不仅是味蕾的…

命令模式详解

命令模式 简介:命令模式将一个请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 人话: 总体来说, 就是一个命令类, 一个执行类, 命令类包括执行类, 然后在外部添加一个总的管…

SQLi-LABS通关攻略【41-45】

SQLi-LABS 41关 这一关是堆叠注入 测试闭合 ?id1 //回显错误 ?id1-- //回显错误 ?id1-- //回显正确 所以是数字型的注入 测试堆叠注入&#xff0c;更改Dumb的密码 ?id1;update users set password123456 where usernameDumb-- SQLi-…

2008-2024年名爵汽车维修手册和电路图线路图接线图资料更新

经过整理&#xff0c;2009-2024年名爵汽车全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表…

潜水装备制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

潜水装备制造行业正经历一场前所未有的变革&#xff0c;5G智能工厂物联数字孪生平台的引入&#xff0c;无疑成为了推动这一行业乃至整个制造业数字化转型的重要驱动力。5G智能工厂物联数字孪生平台作为一种前沿技术&#xff0c;逐渐进入人们的视野。该平台通过集成物联网、大数…

idea配置类注释模板

设置类注释模板 IDEA --> Settings... --> Editor --> File and Code Templates --> Includes -->File Header /** * ClassName: ${NAME} * Package: ${PACKAGE_NAME} * Description: * Datetime: ${DATE} ${TIME} * Author: zhouxl …

2008-2020年 中国健康与养老追踪调查CHARLS数据合集

中国健康与养老追踪调查&#xff08;China Health and Retirement Longitudinal Study, CHARLS&#xff09;是一项由北京大学国家发展研究院主持的大型跨学科调查项目。该项目始于2011年&#xff0c;每两到三年对样本进行一次追踪调查&#xff0c;旨在收集代表中国45岁及以上中…

51单片机-点亮一个LED

2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机&#xff08;0基础&#xff09; 代码&#xff1a; #include <REGX52.H>void main(void) {P2 0xAA; } 现象&#xff1a;

在idea中回滚到某节点并push到远程仓库

一 操作说明 1.1 前提准备 如果是master分支&#xff0c;需要取消master分支保护机制。 去掉保护机制&#xff1a; 1.2 具体操作步骤 1.回滚到具体节点&#xff1a; a)强制reset b&#xff09;选择【hard】选项 2.强制push a&#xff09;选择 force push b&#xff09;选择…

从黑神话悟空看中医养生,各位“天命人”中医养生不了解一下吗?

在国产3A大作《黑神话&#xff1a;悟空》世界里&#xff0c;我们不仅被“天命人”的英勇无畏所震撼&#xff0c;更被那些蕴含深意的道具设计所吸引。今天&#xff0c;三好夫人就和大家一起聊一聊游戏中的“三冬虫”、“铁皮银参”、“落伽香藤”这三大神秘道具出发&#xff0c;…

双重映射+逆向并查集+恢复

前言&#xff1a;一开始没有想着要逆序&#xff0c;自己写了一个并查集但是过了百分之五十&#xff0c;也不知道哪里出了问题 这一题的本质我们要知道&#xff0c;后面的修改覆盖前面的修改&#xff0c;我们直接从后面开始操作就行&#xff0c;然后我们这一题的恢复也是有技巧…

PowerDesigner16.5 从mysql5.7逆向工程

参考&#xff1a;https://blog.csdn.net/vfsdfdsf/article/details/89839991 我的环境 &#xff1a;mysql5.7.18 。PowerDesigner16.5 1、安装mysql的odbc驱动 下载地址&#xff1a;https://dev.mysql.com/downloads/connector/odbc/ 打开页面如下图&#xff0c;我这里下载…

短剧APP系统开发,为市场带来更多机遇

近几年&#xff0c;短剧经历了爆发式增长&#xff0c;在短时间内市场规模迅速扩大&#xff0c;如今更是出现越来越多内容优质、新颖的短剧让大众眼前一亮&#xff0c;吸引了越来越多的短剧观众。 在数字化时代中&#xff0c;短剧系统的开发&#xff0c;为市场带来了技术创新和…