初级C++(一)
- 1: C++参考⽂档
- 2:C++创建与实现
- 创建
- C++的第一套程序
- 命名空间的理解
- 空间命名的实现
- C++输⼊&输出
- 缺省参数
1: C++参考⽂档
https://legacy.cplusplus.com/reference/ 《非官方》
https://zh.cppreference.com/w/cpp 《官方中文版》
https://en.cppreference.com/w/ 《官方英文版》
这些文档相当于字典,方便我们编程
2:C++创建与实现
创建
先创建项目> 在建立c++文件
C++的第一套程序
创建C++文件后开始编写C++。
在C语言中通常会有以下的代码:
// test.cpp
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
这套代码在C++的编译条件下也可以实现
以上可以说明在一定条件下C++是与C是兼容的.
C++代码:
#include<iostream>
using namespace std;
int main()
{
cout << "hello world\n" << endl;
return 0;
}
这就是C++的代码形式。
命名空间的理解
- namespace的作用
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决这样的问题
例如:
#include<stdio.h>
int time = 0;
#include<time.h>
int main()
{
printf("%d", time);//重定义,之前是定义是函数。
return 0;
}
- namespace的定义
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
如:
#include<iostream>
namespace cwz
{
// 命名空间中可以定义变量/函数/类型
int a=0;
int b=0;
char c='x';
add(int x,int y);
}
• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。
•C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。
• namespace只能定义在全局,当然他还可以嵌套定义。
如:
#include<iostream>//可以简单的理解为小组作业
namespace cwz//这是cwz小组
{
namespace cbc//在cwz小组中有cbc的作业
{
int a=0;
int b=0;
}
namespace wwj//和在cwz小组中有wwj的作业
{
char c='x';
add(int x,int y);
}
}
• 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
• C++标准库都放在⼀个叫std(standard)的命名空间中。
空间命名的实现
根据空间命名的理解,接下来就是对空间命名的实现。
编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。所以
下⾯程序会编译报错。所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:
- • 指定命名空间访问,项⽬中推荐这种⽅式。
- • using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。
- • 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
一:指定命名空间访问
#include<stdio.h>
namespace cwz
{
int a = 0;
int b = 1;
}
int main()
{
// 编译报错:error C2065: “a”: 未声明的标识符
printf("%d\n", a);
return 0;
}
(1)::(限定区域符)
// 指定命名空间访问
int main()
{
printf("%d\n", N::a);
return 0;
}
二using命令空间
// using将命名空间中某个成员展开
using N::b;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}
C++输⼊&输出
• 是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输出对象。
• std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输⼊流。
• std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
• std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。
<< 流输出:
#include<iostream>
using namespace std;//using展开
int main()
{
int a = 1;
float b = 2.3;
char c = 'x';
cout << a << " " << b << " " << c << endl;
}
<< 是把相对应的整形、浮点型、字符输出到控制台上,其特点是自动识别类:
对于<< (输入流):
#include<iostream>
using namespace std;
int main()
{
int a = 1;
float b = 2.3;
char c = 'x';
cin >> a >> b >> c;//输入对应数字,相当于C的scanf
cout << a << " " << b << " " << c << endl;
}
而相对于C语言要指定对应类型才能实现对应输出输入
缺省参数
定义:
缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把缺省参数也叫默认参数)
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
• 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
• 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值
- 全缺省
#include<iostream>
using namespace std;
void function1(int a = 10, int b = 2, int c = 4)
{
cout << "a= " << a <<endl;
cout << "b= " << b << endl;
cout << "c= " << c << endl;
}
int main()
{
function1();
return 0;
}
- 半缺省
#include<iostream>
using namespace std;
void function2(int a, int b = 0, int c = 1)//半缺省只能从右往左
{
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "c= " << c << endl<<endl;
}
int main()
{
function2(1);
function2(1, 2);
function2(1, 2, 3);
//function2(, 2, );//不能跳跃传参
}
C++初级一的内容到此结束,感谢大家的观看!!!