C++基础

一,命名空间

定义:就是一个可以由用户自己定义的作用域,在不同作用域中可以定义相同名字变量,互不干扰,系统能够区分。

格式:

cpp 复制代码
namespace wd
{
    int val1 = 0;
    char val2;
}

在声明一个命名空间时,大括号内不仅可以存放变量,还可以存放:变量,常量,函数,结构体,引用,类,对象,模板,命名空间等------都称为实体

调用:

cpp 复制代码
int main(void)
{
    count << wd::num << endl;
}

或者写到函数里面再在main中去调用这个函数:

cpp 复制代码
namespace wd
{
	int num = 10;
}
void test0()
{
	cout << wd::num << endl;
}
int main(void)
{
	test0();
	return 0;
}

使用作用域限定的方式访问命名空间中的实体

优点:准确,只要命名空间中确实有这个实体,就能准确调用。

缺点:繁琐。

注意1:using 指令建议放到局部作用域去使用,它的效果是将命名空间中的实体引入,在using编译指令之后可以直接使用实体名称访问命名空间中的实体。

cpp 复制代码
#include<iostream>
using namespace std;
namespace wd
{
	int num = 10;

}
namespace wd2
{
	int num = 20;
}

void test0()
{
	using namespace wd;
	cout << num << endl;
}

void test1()
{
	using namespace wd2;
	cout << num << endl;
}
int main(void)
{
	test0();
	test1();
	return 0;
}

此处编译返回结果互不干扰程序可以正常运行。

如果作用域为整个程序会出现同一个名称出现二义性。

注意2:这种方式使用命名空间中的实体时,要注意避免命名空间中实体与全局位置实体同名。

注意3:在不清楚命名空间中实体的具体情况时,尽量不使用using编译指令。

cout是C++标准库std命名空间里的输出对象名,但是这里自定义的cout()函数会和using namesoace std;这个起了冲突。

using namespace std; // C++库中所有东西都是放到std命名空间中,

cout是可以自动识别实体的类型

二,缺省参数

2.1定义

cpp 复制代码
#include<iostream>
using namespace std;
//缺省参数
void Func(int a = 0)
//int a = 0 ;
// 形参  缺省参数
{
	cout << a << endl;
}

int main()
{
	Func(10);//传递数值10
//    实参
	Func();//未传递任何数

	return 0;
}

缺省参数相当于先给函数中的形参附上一个默认值,当调用函数时给了具体的数值时则将具体数值输出,若没有调入参数时运行函数则输出缺省参数值。

上方代码执行结果如下图所示;

2.2缺省函数分类

2.2.1:全缺省参数

cpp 复制代码
#include<iostream>
using namespace std;
void Func1(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;

}
int main()
{
	Func1();
	Func1(1);
	Func1(1,2);
	Func1(1,2,3);
	return 0;
}

2.2.2:半缺省参数 //缺省部分参数 --- 必须从右往左连续缺省

cpp 复制代码
#include<iostream>
using namespace std;
void Func2(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << " " << endl;

}
int main()
{
	//Func2();
	Func2(1);
	Func2(1, 2);
	Func2(1, 2, 3);

	return 0;
}

当形参中有缺失的时候必须给参数才能运行否则程序报错;

注:调用时如果要传参必须从左往右依次传参,不能空缺。

三,函数重载

3.1.1概念

函数重载允许你在同一个作用域(比如同一个类、同一个全局命名空间)中 ,定义多个函数名相同但参数列表不同的函数。---> 一词多义。

cpp 复制代码
#include<iostream>
using namespace std;
//函数重载
//函数名相同,参数不同(类型 || 个数 || 顺序不同)
//类型不同
int Add(int left, int right)
{
	return left + right;
}
double Add(double left, double right)
{
	return left + right;
}
long Add(long left, long right)
{
	return left + right;
}
//个数不同
void Sum(int a, int b)
{

}
void Sum(int a, int b, int c)
{

}
//顺序不同
void Func(int i, char ch)
{

}
void Func(char ch, int i)
{

}
int main()
{

	return 0;
}

注:若只是返回值不同的情况下,不能构成重载。

在调用函数重载的调用中对应某种传参就直接对应重载函数去运行(自动执行);

eg:

3.1.2 C++是如何支持函数重载的?为什么C语言不支持

c/c++程序编译四个阶段:

1>预处理 -> 处理源代码中的预处理指令(如#include#define等),展开头文件、替换宏,生成一个没有预处理指令的纯 C/C++ 文本文件(通常后缀为.i)。

2>编译 -> 对预处理后的文件进行词法分析、语法分析和语义分析,将其翻译成汇编代码(通常后缀为.s)。

3>汇编 -> 将汇编代码转换为机器能识别的二进制目标文件(通常后缀为.o.obj

4>链接 -> 将多个目标文件和系统库文件合并,解决函数和变量的引用问题,生成最终的可执行文件

相关推荐
云泽80830 分钟前
C++ 多态入门:虚函数、重写、虚析构及 override/final 实战指南(附腾讯面试题)
开发语言·c++
仰泳的熊猫35 分钟前
题目1535:蓝桥杯算法提高VIP-最小乘积(提高型)
数据结构·c++·算法·蓝桥杯
yanghuashuiyue1 小时前
lambda+sealed+record
java·开发语言
闻缺陷则喜何志丹1 小时前
【前后缀分解】P9255 [PA 2022] Podwyżki|普及+
数据结构·c++·算法·前后缀分解
yzx9910132 小时前
Python数据结构入门指南:从基础到实践
开发语言·数据结构·python
消失的旧时光-19432 小时前
智能指针(二):机制篇 —— 移动语义与所有权转移
c++·智能指针
衍生星球2 小时前
【JSP程序设计】Servlet对象 — page对象
java·开发语言·servlet·jsp·jsp程序设计
扶苏瑾2 小时前
线程安全问题的产生原因与解决方案
java·开发语言·jvm
小小小米粒3 小时前
函数式接口 + Lambda = 方法逻辑的 “插拔式解耦”
开发语言·python·算法
风吹乱了我的头发~3 小时前
Day31:2026年2月21日打卡
开发语言·c++·算法