【C++干货基地】C++入门篇:输入输出流 | 缺省函数 | 函数重载


引入

哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作为一门篇底层的一种语言,世面的免费课程大多都没有教明白。所以本篇专栏的内容全是干货让大家从底层了解C++,把更多的知识由抽象到简单通俗易懂。

⛳️ 推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

@TOC

一、C++的输入输出

每当我们学习一个函数的时候,最首先学习的就是输入和输出那么我们来看看C++是如何来像这个世界打个招呼吧!

1.1 cout 输出函数

在C++ 中的输入函数做了新的升级而且在以往我们 写C语言的时候每个类型的变量都要书写函数类型过于玛法了所以在 C++ 输出是自动识别类型的:

  • cout 中的 Cconsole 控制台的意思:
  • cout 就代表 输出到控制台

🍸 代码演示:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

int main()
{
	int b= 10;
	double x = 1.11;
	char a = 'h';

	cout << b <<"\n";
	cout << x << endl;
	cout << a << endl;

	return 0;
}

这里补充一下,C++在开发出来的时候本贾尼博士觉得写 "\n" 来进行换行台麻烦了所以:

  • 在C++ 中换行是 endl
  • endl 代表的英文意思是
  • end 代表结束, lline 行的意思,结束这一行就是换行的意思

1.2 <<流插入 & >> 流提取

在C++中 <<是流插入运算符,>>是流提取运算符。同时C++也兼容

  • C语言中 << 左移操作符 >> 右移动操作符

🍸 代码演示:

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

int main()
{
	int a = 100;
	a = a << 1;

	cout << a << endl;
	return 0;
}

1.3 cin 输入函数

cin 是C++ 中的输入函数,和 cout 一样都是 ostream和istream类型的对象,需要我们搭配流提取操作符一起使用:

🍸 代码演示:

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

int main()
{
	int a = 0;

	cin >> a;
	cout << a << endl;
	return 0;
}

二、缺省函数

缺省函数 又叫 默认参数 听名字其实就能大概猜出来是什么意思,其实就是当我们没有给函数参数传递值的时候就使用我们赋予的缺省值/默认值。

2.1 缺省函数的概念

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

🍸 代码演示:

cpp 复制代码
void Func(int a = 0)
{
 cout<<a<<endl;
}
int main()
{
 Func();     // 没有传参时,使用参数的默认值
 Func(10);   // 传参时,使用指定的实参
return 0;
}

2.2 缺省函数的分类

2.2.1 全缺省函数

全缺省函数就是函数的全部形参给了缺省值或者默认值

🍸 代码演示:

cpp 复制代码
void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

2.2.2 半缺省函数

半缺省函数就是只给部分缺省值,== 但是半缺省参数必须从右往左依次来给出,不能间隔着给 ==

  • 这是因为隔着给参数的话编译器并不能自动识别到底是使用缺省参数还是不使用
  • 如果全给了就完全没有意义隔着给了

📑 == 错误展示:==

cpp 复制代码
void fun(int a = 10, int x , int y = 10)
{

}

int main()
{
	fun(1);
	return 0;
}

这里的1究竟是想给 x 还是 a 呢?如果写俩个那么隔着写的意义再哪里呢?

🍸 代码演示:

cpp 复制代码
void Func(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

缺省函数其实在实际范围应用非常的广泛,让函数的用法更加灵活我们可以传一个参数也可以或者传2个参数也可以

  • 比如说我们在对栈开辟空间时候就会遇到好几种情况以往我们都是默认先开辟4个而现在

🍸 代码演示:

cpp 复制代码
#include<iostream>
#include"Stack.h"
using namespace std;

int main()
{
	struct Stack st1;

	// 1、确定要插入100个数据
	StackInit(&st1, 100);  

	// 2、只插入10个数据
	struct Stack st2;
	StackInit(&st2, 10);

	// 3、默认插入
	struct Stack st3;
	StackInit(&st3);
	return 0;
}

2.2.3 缺省函数的注意事项

  • == 1. 半缺省参数必须从右往左依次来给出,不能间隔着给 ==
  • == 2. 缺省参数不能在函数声明和定义中同时出现 ==

还有一个很重要的一点是当函数声明和定义分离的时候,应在声明中去声明缺省函数,定义中不能进行同时声明缺省函数

2.2.4 函数声明和定义分离,缺省函数只能在声明定义

为什么函数声明和定义分离,缺省函数只能在声明定义呢?其实第一个原因是因为

  • 🌱 == 缺省函数在声明和定义分离的时候特别容易写错 ==
  • 🌱 == 还有一个很大的原因是因为从编译原理上面来看 ==

源文件在进行编译的时候就会出现,如果我们不在缺省函数只能在 声明定义 缺省函数的话

  • 程序在 编译的时候就会被检查语法拦截住了
  • 预处理是把 头文件展开 而头文件里面我们没有声明缺省函数参数 又没有写语法上就直接错误了

📑 ==错误示范: ==

三、函数重载

在C++ 里面还对函数做了新的升级,函数重载,即一个函数名可以根据参数类型不同拥有多个功能:

  • 这在C语言中是绝对不支持的那么怎么样才算函数重载呢?

3.2 函数重载概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

在C++中,只要函数名相同,函数参数不同就可以构成重载

  • 🌱 ==函数参数类型不同==
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()
{
	Add(10, 20);
	Add(10.1, 20.2);
}
  • 🌱 ==函数个数不同==
cpp 复制代码
#include<iostream>
using namespace std;
// 2、参数个数不同
void f()
{
	cout << "f()" << endl;
}
void f(int a)

int main()
{
	f();
	f(10);
}
  • 🌱 ==参数顺序不同(本质上还是参数类型不同)==

🍸 代码演示:

cpp 复制代码
#include<iostream>
using namespace std;
// 3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}
int main()
{
	f(10, 'a');
	f('a', 10);
	return 0;
}
相关推荐
customer0815 分钟前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
2402_8575893625 分钟前
SpringBoot框架:作业管理技术新解
java·spring boot·后端
可均可可29 分钟前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
一只爱打拳的程序猿43 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
白子寰1 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
小芒果_011 小时前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
gkdpjj1 小时前
C++优选算法十 哈希表
c++·算法·散列表
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
-Even-1 小时前
【第六章】分支语句和逻辑运算符
c++·c++ primer plus
我是谁??2 小时前
C/C++使用AddressSanitizer检测内存错误
c语言·c++