【C++笔记1】初识C++(C++关键字、命名空间的定义/使用、C++的输入输出、缺省参数)


所有运行结果均在VS2022,Debug,x86的环境下得出

一、C++关键字

前面我们学习C语言,其关键字一共有32个关键字,但是,C++的关键字有63个。如下:
C++关键字

二、命名空间

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染

1.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员

1.1命名空间里可以定义函数、变量、类型

代码示例:

#include<stdio.h>                                  
#include<stdlib.h>                                  

namespace zxb  
//"zxb"是“邹小白”的缩写                                  
{
	int b = 0;                                  

	int Add(int left, int right)                                  
	{
		return   left + right;                                  
	}

	struct Node                                  
	{
		struct Node* next;     
		int val;     
	};
}

1.2命名空间可以嵌套

代码示例:

namespace zxb
	//"zxb"是“邹小白”的缩写
{
	namespace xb 
		//"xb"是“小白”的缩写 
	{
		int a = 0; 

		int Add(int left, int right)     
		{
			return left + right;     
		}

		struct Node     
		{
			struct Node* next;     
			int val;     
		};
	}
}

1.3多个相同名称的命名空间,编译器最后会合成同一个命名空间中

在同一个文件,或不同文件中,若出现相同名称的命名空间,会进行合并。
可以这样理解:把命名空间看做菜地,隔壁老王他在村子里有多块地,地虽然分布在不同地方,但是这些地,都是老王家的,都合并到老王名下。
如下图所示:
命名空间可以合并

2.命名空间的使用

2.1加命名空间名称及作用域限定符----指定访问

#include<stdio.h>
#include<stdlib.h>            
int main()              
{
printf("%d\n", zxb::b);         
printf("%d\n", zxb::xb::a);          
//这里使用的是上面定义的命名空间          
return 0;           
}   

2.2使用using将命名空间中某个成员引入----指定展开某一个

#include<stdio.h>   
#include<stdlib.h>   
using zxb::b;   
int main()   
{
//zxb为上面所定义的命名空间   
printf("%d\n", zxb::xb::a);   
printf("%d\n", b);    
return 0;    
}
}

2.3使用using namespace 命名空间名称 引入----全展开

#include<stdio.h>                                       
#include<stdlib.h>                                       

using namespce zxb;                                        
//zxb为上面所定义的命名空间                                          
int main()                                          
{
printf("%d\n", b);                                           
Add(10, 20);                                           
return 0;                                           

2.4编译器(VS2022)默认的查找顺序

2.41未展开命名空间
  1. 当前局部域
  2. 全局域

会先查找局部域,再去查找全局域

2.42展开了命名空间
  1. 当前局部域
  2. 全局域和展开的命名空间

会先查找局部域,若没有查到,会去在全局域和展开的命名空间中所查找
这时候我们需要注意全局和展开命名空间的是否有同名变量。

2.5目前所学的域

  1. 当前局部域
  2. 全局域
  3. 展开的命名空间
  • 局部域
  • 全局域
  • 命名空间域
  • 相同点: 不同域可以定义同名的变量/函数/类型
  • 不同点:命名空间域修饰全局,不影响生命周期
  • 在C++中,一般用花括号“{}”括起来的,都是域。

三、C++的输入与输出

代码示例与讲解:

//头文件 
#include <iostream>   
//展开命名空间   
//std是C++的标准库的命名空间名   
//写练习时,常常可以使用它,会更方便   
//但是,写项目时,尽量不用,因为容易发生冲突    
//此时,常常指定展开某个    
using namespace std;    
int main()    
{
int a;          
double b;          
char c;          
// 可以自动识别变量的类型          
//也可以与C语言中的printf与scanf混合使用        
//输入流           
cin>>a;           
cin>>b>>c;           
//输出流           
cout<<a<<endl;           
cout<<b<<" "<<c<<endl;           
return 0;           
}

四、缺省参数

1.概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。

  • 缺省参数不能在函数声明和定义中同时出现
  • 缺省值必须是常量或者全局变量
  • C语言不支持(编译器不支持)

以下代码便使用了缺省参数

void Func(int a = 0)   
{
cout<<a<<endl;   
}
int main()   
{
Func(); // 没有传参时,使用参数的默认值       
Func(10); // 传参时,使用指定的实参       
return 0;       
}
void Func(int a = 10, int b = 20, int c = 30)       
{
cout<<"a = "<<a<<endl;      
cout<<"b = "<<b<<endl;      
cout<<"c = "<<c<<endl;      
}
void Func(int a, int b = 10, int c = 20)      
{
cout<<"a = "<<a<<endl;      
cout<<"b = "<<b<<endl;      
cout<<"c = "<<c<<endl;      
}

2.分类

2.1全缺省参数
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半缺省参数
void Func(int a, int b = 10, int c = 20) 
{
cout<<"a = "<<a<<endl; 
cout<<"b = "<<b<<endl; 
cout<<"c = "<<c<<endl; 
}
  • 半缺省参数只能从右往左依次给出,不能间隔跳跃着给。
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹小白_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值