当前位置: 首页 > news >正文

【落羽的落羽 C++】C++入门基础:输入与输出,缺省参数,函数重载

今天败犬女主第二季制作决定宣发!开心!

文章目录

  • 一、C++的输入与输出
  • 二、函数的缺省参数
  • 三、函数重载

一、C++的输入与输出

这一部分知识涉及到后面C++的类和对象的概念,这里我们只能简单理解:

  • <iostream>是Input Output Stream的缩写,是标准的输入输出流库,定义了标准的输入、输出对象。
  • std::cin是istream类的对象,主要面对窄字符的标准输入流。
  • std::cout是ostream类的对象,主要面对窄字符的标准输出流。
  • std::endl是一个函数,流输入输出时,相当于插入一个换行字符(\n),刷新缓冲区。
  • <<是流插入运算符,>>是流提取运算符(同时也是运算左移/右移)。
  • 使用C++进行输入输出时,不需要像printf和scanf那样手动指定格式,C++的输入输出可以自己识别变量类型(本质是通过函数重载实现的)。C++的流能更好地支持自定义类型对象的输入输出。
  • cout、cin、endl等都属于C++标准库,C++标准库都放在一个叫std的命名空间中,所以我们要通过命名空间的使用方式去使用它们。一般的练习中我们可以直接using namespace std;实际项目开发中不建议。
  • 下面我们没有包含头文件stdio也可以使用printf和scanf,因为它们在iostream中间接包含了。VS系列编译器是这样的,其他编译器可能不支持会报错。

直接来看一般使用实例:

#include<iostream>

using namespace std;

int main()
{
	int a = 1;
	char c = 'B';

	cout << "一、" << a + 2 << " " << c << endl;//endl会自己换行
	//或: 
	std::cout << "一、" << a + 2 << " " << c << std::endl;

	return 0;
}

在这里插入图片描述

#include<iostream>

using namespace std;

int main()
{
	int a, b;
	char c;

	//能自动识别变量类型
	cin >> a;
	cin >> b;
    cin >> c;
	//cin >> a >> b >> c;等效

	cout << a << ' ' << b << ' ' << c << endl;

	return 0;
}

在这里插入图片描述

现在能看懂理解就好,之后我们会深入学习C++的类和对象。

在这里插入图片描述

二、函数的缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值在调用该函数时,如果我们没有给函数传实参,则函数的形参直接采用这个缺省值,有实参则优先采用实参值。缺省参数分为全缺省和半缺省(有些地方也把缺省参数叫做默认参数)。但是,当函数的声明和定义不再一个文件中时,缺省参数值就不能在声明和定义中同时出现了,规定必须在函数声明中给定缺省值。

比如:

//head.h中:
#include<iostream>
using namespace std; 
int Add(int x = 10, int y = 20); //10和20就是缺省值

//head.cpp中:
#include"head.h"
int Add(int x, int y)
{
    return x + y;
}

//test.cpp中:
#include"head.h"
int main()
{
    int a = Add(); //没有给函数Add传实参,则Add的形参值采用缺省值10、20
    cout << a <<endl; //a的值应为30
    return 0;
}

在这里插入图片描述

缺省参数分为全缺省和半缺省:
全缺省就是所有形参都给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续给缺省值,不能间隔跳跃或从左到右给缺省值。
例如:
void Fun1(int a = 1, int b = 2, char c = 'A');是全缺省
void Fun2(int a, int b = 2, char c = 'A');void Fun3(int a, int b, char c = 'A');是半缺省
void Fun4(int a = 1, int b = 2, char c);void Fun5(int a, int b = 2, char c);是错误的

而带缺省参数的函数的调用时,C++规定必须从左到右依次给实参,不能跳跃给实参。
例如:
声明定义好上面的Fun1后,
调用时我们可以不传实参Fun1();,函数内部三个形参就用它们的缺省值;
也可以只传一个参数如Fun1(6);,这意味着函数内部变量a的值采用6,b和c仍采用缺省值;
也可以传两个参数如Fun1(6, 8);,函数内部变量a的值采用6,b的值采用8,c采用缺省值"A";也可以传三个参数如Fun1(6, 8, 'P');,三个变量就采用传的三个值;
如果你尝试了Fun1('B');,会发现a的值变成了66(B的ASCII值),b和c仍采用缺省值。这就是因为给实参是从左往右依次的。
看看实例:

//head.h中:
void Fun1(int a = 1, int b = 2, char c = 'A');

//head.cpp中:
void Fun1(int a, int b, char c)
{
    //打印abc
    cout << a << ' ' << b << ' ' << c << endl;
}

//test.cpp中:
Fun1();
Fun1(6);
Fun1(6, 8);
Fun1(6, 8, 'P');
Fun1('B');

结果符合我们的预期
在这里插入图片描述

在这里插入图片描述

三、函数重载

C语言是不支持在同一域中出现同名函数。C++支持在同一作用域中出现同名函数,但要求这些同名函数的形参不同:可以是形参类型不同,也可以是形参个数不同,也可以是形参类型顺序不同,亦或三者兼有。这样C++的函数调用就表现出了多态行为,使用更加灵活。这样的同名函数就叫构成了函数重载。

但是!同名函数的返回类型不同并不是区别它们的依据。如果同名函数的返回类型不同,即使它们的形参不同,也会编译报错。

而在调用同名函数时,使用者的传参一定要符合某一个函数的形参定义,C++会根据你的实参判断调用哪个函数的。

//形参类型不同的同名函数:
int Add(int x, int y);
double Add(double x, double y);

//形参个数不同的同名函数:
void Fun(int a);
void Fun(int a, int b);

//形参顺序不同的同名函数:
void Fun1(int a, char c);
void Fun1(char c, int a);

//三者兼有(其实就是形参压根完全不一样):
void Fun2(int a, char c, int* b);
void Fun2(struct ListNode* d, double e);

//这两个同名函数不能构成函数重载:
//void Fun3(int a);
//int Fun3(int a);

但是,还存在一种特殊情况:当同名函数中一个函数又有了缺省参数,如

void Fun();
void Fun(int a = 2);

假如调用Fun(),既可以理解成不传参调用第一个Fun函数,也可以理解成不传参调用第二个Fun函数,a采用缺省值2。因此存在歧义,编译器也不理解到底调用哪个函数,就会报错:

在这里插入图片描述

在这里插入图片描述

本篇完,感谢阅读

相关文章:

  • FastGPT 源码:RRF、Rerank 相关代码
  • FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
  • 源码编译安装httpd
  • 示例:在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处
  • 算力100问☞第72问:算力与算法、数据的关系是什么?
  • JavaScript 变量命名规范
  • 自编码器——数据降维及特征提取
  • slf4j和log4j的区别与使用
  • Mysql从入门到精通day2————数据表操作
  • 第五十三:v-model修饰符
  • 深度学习之图像学习知识点
  • DeepSeek未来发展趋势:开创智能时代的新风口
  • 高频 SQL 50 题(基础版)_610. 判断三角形
  • IT产品经理如何打造优秀并具有影响力的产品
  • C# WinForm程序中如何调试dll接口
  • Leetcode 3468. Find the Number of Copy Arrays
  • 《大语言模型的原理发展与应用》:此文为AI自动生成
  • 从文件到块: 提高 Hugging Face 存储效率
  • angular实现nodejs增删改查
  • 虚拟系统配置实验
  • 百度做网站的服务合同/常见的网络营销策略都有哪些
  • 电商专业培训网站建设/海口网站建设
  • 百度云分享tp响应式网站开发/微信营销工具
  • 苏州网站建设书生/中国十大营销策划公司排名
  • 云和网站建设/有没有免费的crm系统软件
  • 上海网站论坛建设/seo优化排名技术百度教程