本章内容:
- 简要回顾C++语言最重要的部分及语法
(主要讲述日常编程会遇到的最重要的C++部分,大佬快速浏览即可)
1.1 C++基础知识
- C++是基于C语言的超集,但这两种语言并不一样
1.1.1 小程序的"hello world"
//HelloWorld.cpp #include<iostream> int main() { std::cout << "Hello world" << std::endl; return 0; }
- 注释
- 第一行是注释
- 两种写法:两条斜杠开头(C++风格)或/**/包裹(C风格)
- 注释仅供程序员阅读,编译器自动忽略不运行
- 预处理指令
- 第二行是预处理指令
- 预处理指令以#字符开始
- include 指令首先告诉预处理器,提取<iostream>头文件中所有内容提供给当前文件,<iostream>头文件声明了C++提供的输入输出机制(没有此头文件,将无法执行输入输出文本)
- 在C中,被包含的文件常以 .h 结尾,C++中标准库的头文件则省略了这一后缀
- C中的标准头文件在C++中仍然存在,但换用了新名称(如<stdio.h>变成了<cstdio>)
- main()函数
- main() 函数是程序的入口
- main() 函数返回一个 int 值以指示程序的最终状态
- 输入/输出流
- 可以将输出流想象为数据的滑槽,放入其中的任何内容都可以被正确的输出
- std::cout 就是对应于用户控制台或标准输出的滑槽,还有其他滑槽,包括用于输出错误信息的 std::cerr
- std::cout 输出流可以在一行代码中连续输出多个不同类型的数据(std::cout << "文本" << 123;)
- std::cin 输入流接受用户的键盘输入,但需慎重(永远不知道用户会输入什么奇奇怪怪的东西)
- std::endl 代表序列的结尾换行,另一种换行符是:转义字符\n
- \n 换行
- \r 回车
- \t 制表符
- \\ 一个反斜杠
- \" 一个引号
1.1.2 命名空间
using namespace std;
- :: 被称为作用域解析运算符
- 命名空间用来处理不同代码段间的名称冲突问题(如:第三方库中有Func()函数,而自己也写了Func()函数,就可以把自己写的放进 namespace mycode{ Func(){} },从而调用 mycode::Func(); )
- 使用 using 指令避免预先指明命名空间,使用 using namespace mycode,就可以直接调用 Func();
#include<iostream> #include"namespace.h" namespace mycode { int A = 0; void Func() { std::cout << "Func()" << std::endl; } } //将Func()函数放进命名空间之后,就与第三方库函数Func()区分开来,可调用: mycode::Func();
mycode::A;
上面代码等价于:
#include<iostream> #include"namespace.h" using namespace mycode { int A = 0; void Func() { std::cout << "Func()" << std::endl; } } //将Func()函数放进命名空间之后,就与第三方库函数Func()区分开来,可调用: Func();
A;
一个源文件中可以包含多个 using 指令,此方法虽然快捷,但不要过度使用
- 使用整个命名空间:using namespace [name];
- 使用命名空间中的变量:using [name]::[variable];
- 使用默认命名空间中的变量:::[variable];
1.1.3 变量
- 声明变量时,可以不指定值(未初始化的变量通常被赋予一个半随机值,bug)
- C++中常见变量类型:
int a; short b; long c; long long d; // unsigned 对上面类型加以限制,使之为正数 unsigned int aa; unsigned short bb; unsigned long cc; unsigned long long dd; //浮点型(单/双精度) float e = 3.14f; double f; long double g; //字符型(单个字符,单个16位字符,单个32位字符,单个宽字符) char h = 'm'; char16_t h1 = u'm'; char16_t h2 = U'm'; wchar_t h3 = L'm'; //布尔型,结果返回 true / false bool i = true; //auto 编译器自动判断类型 auto j = 10; //应该为int型
- C++没有提供基本的字符串类型,但作为标准库的一部分提供了字符串的标准实现
3. 三种显式转换变量类型:
bool IfBool = (bool) IfInt; bool IfBool = bool(IfInt); bool IfBool = static_cast<bool>(IfInt);
- 在某些环境中,可以自动执行类型转换 / 强制转换
- 但有时,自动类型转换存在潜在的数据丢失(如:float 转换为 int 会丢失小数部分)
1.1.4 运算符
- 如果记不住C++运算符的优先级,建议使用括号将表达式分组
1.1.5 类型
- 枚举类型
enum Color{red = 2,green,blue = 5,pink}; //默认情况下,所枚举元素第一个名称的值为0,第二个名称的值为1,第三个名称的值为2,以此类推。 //但此处,我设置了初始化值,默认情况下,每个名称都会比它前面一个名称大1,所以:red = 2,green = 3,blue = 5,pink = 6 Color pink;
2. 强枚举类型
上面给出的枚举并不是强类型的,这意味着其并非类型安全的,基本上会被当作整型数据 int 解释
enum class Color{red = 2,green,blue = 5,pink}; //Color 是一个类型安全的枚举,其枚举值不会自动转换为整数,枚举名称不会自动超出封闭的作用域
- 默认情况下,枚举值的基本类型是整型
3. 结构
结构允许将一个或多个已有类型封装到一个新的类型中
Struct Student{ string Name; //学生姓名 int age; //学生年龄 int score; //学生分数 };
1.1.6 条件
1. if / else 语句
if(){} else if(){} else{} //()圆括号内的结果必须是布尔值
2. switch 语句
switch(){ case 1: //执行代码 break; case 2: //执行代码 break; .... default: //执行代码 break; } //如果省略 break ,将会无视case判断,直接执行后面的代码
3. 三元运算符
(i = 0) ? 1 : 2; // 判断括号内是否正确,正确返回1,错误返回2 //相当于 if(i = 0){ return 1; } else{ return 2; }
1.1.7 循环
1. while 循环
while(){ //执行代码; }
2. do / while 循环
do { //执行代码; } while();
3. for 循环
for(int i=0; i; i++){ //执行代码; }
4. 基于区间的for循环
int arr[] = {1,2,3,4}; for(auto &i : arr){ i+=2; }
1.2 深入研究C++
1.3 作为面向对象语言的C++
1.4 标准库
未完待续.....
标签:std,1.1,int,编程,namespace,C++,速成,枚举 From: https://www.cnblogs.com/ZWJ-zwj/p/16864825.html