C++入门知识
兼容性
1. C++兼容绝大多数C语言的语法,因此只需要把 .c 后缀文件改为 .cpp 即可。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{printf("hello world");return 0;
}
//hello world
命名空间
namespace关键字
1. 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用中,可能会导致很多冲突。2. 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。3. 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对 { } 即可,{ } 中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。4. namespace本质是定义⼀个域,创建一个命名空间域,这个域跟其他的域相互独立。5. 不同的域可以定义同名变量,但同一个域不能定义同名变量。6. 命名空间只能在全局域中定义,原本就是为了在全局中进行隔离。所以里面的变量、函数的生命周期都是全局的。7. 命名空间域里面可以继续嵌套命名空间域。8. 多个文件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀样。9. C++标准库都放在⼀个叫std(standard)的命名空间中。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
namespace hsy
{int rand = 10;//只有全局域和局部域才影响生命周期,其他的域里面的变量、函数都是全局的。
}
int main()
{printf("%p\n", rand);//00007FFD2F024D50printf("%d\n", hsy::rand);//10return 0;
}
x//局部变量的x
::x//全局变量的x
hsy::x//命名空间hsy的x
:://域作用限定符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
namespace hsy
{namespace yhy{int rand = 2024;}namespace sbd{int rand = 2023;}
}
//命名空间域里面可以继续嵌套命名空间域。
int main()
{printf("%p\n", rand);//00007FFD2F024D50printf("%d\n", hsy::yhy::rand);//10printf("%d\n", hsy::sbd::rand);//10return 0;
}
命名空间的使用
1. 编译查找⼀个变量的声明、定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。
2. 所以我们要使用命名空间中定义的变量、函数,有三种方式:
- 指定命名空间访问。
using将命名空间中某个成员展开。 using展开命名空间中全部成员.
#include<stdio.h>
namespace hsy
{int a = 0;int b = 1;
}int main()
{printf("%d\n", a);// 编译报错:error C2065: “a”: 未声明的标识符return 0;
}int main()
{printf("%d\n", hsy::a);// 指定命名空间访问return 0;
}using hsy::b;// using将命名空间中某个成员展开,相当于把命名空间域hsy里面的东西暴露在全局域中
int main()
{printf("%d\n", hsy::b);printf("%d\n", b);//效果相同return 0;
}using namespce hsy;// 展开命名空间中全部成员
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}
C++输入输出
1. <iostream>头文件,是Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
2. <<是''流插入''运算符,>>是''流提取''运算符。
3. std::cin 是 istream 类的对象,标准输入流。
4. std::cout 是 ostream 类的对象,标准输出流。
5. std::endl 是⼀个函数,流插入输出时,相当于插入⼀个换行字符加刷新缓冲区。
6. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型。
7. cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间域中,所以要通过命名空间的使用方式去用他们。
8. ⼀般日常练习中我们可以using namespace std。(更方便)
#include <iostream>
using namespace std;
int main()
{int a = 0;cout << a << " " << 'b' << endl;std::cout << a << " " << 'b' << std::endl;return 0;
}
//0 b
//0 b
缺省参数
1. 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。2. 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。3. 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省 值。