C++ 速通
我需要在最短时间捡起 C++,以备刷题
简介
应用:系统、图形用户界面、嵌入式系统、游戏开发
C 是 C++ 的子集(可粗略这样看)
C++ 为程序员提供了对系统资源和内存的高级控制
IDE: vscode,Code::Blocks,Eclipse,Visual Studio
**编译器:**gcc(g++)
vscode 配置环境
参见《命令行》Linux实践,配置过程完全一样
- 提前下好编译器(网上博客很多推荐的)
- 除了连接wsl其他都一样
基础
语法
输出:cout <<
(不会在输出末尾插入新行)
输入:cin >>
插入新行:\n
,endl
注释:
- 单行:
//
- 多行:
/**/
常量:const
数据类型
整型:
类型 | 大小 | 范围 |
---|---|---|
int |
4B | $-2^{31}$ ~ $2^{31}-1$:大约$2.1\times10^{9}$ |
unsigned int |
4B | $0$ ~ $2^{32}-1$:大约 $4.2\times10^{9}$ |
long long |
8B | $-2^{63}$ ~ $2^{63}-1$:大约$9.2\times10^{18}$ |
unsigned long long |
8B | $0$ ~ $2^{64}-1$:大约$1.8\times10^{19}$ |
字符型:
类型 | 大小 | 范围 |
---|---|---|
char |
1B | $-128$ ~ $127$ |
布尔型:
类型 | 大小 | 范围 |
---|---|---|
bool |
1B | true /false |
浮点型:
类型 | 大小 | 范围 |
---|---|---|
double |
8B | 大约$10^{307}$,精度15位有效数字 |
float |
4B | 大约$10^{31}$,精度6位有效数字 |
字符串型
运算符
运算符 | 描述 |
---|---|
&= |
按位与赋值 |
` | =` |
^= |
按位异或赋值 |
>>= |
右移赋值 |
<<= |
左移赋值 |
字符串型
C++ 中的字符串实际上是一个对象
头文件:#include <string>
拼接:
+
append()
长度:length()
或 size()
访问、更改:
- 索引
[]
.at()
转义:\'
,\"
,\\
\n
:换行\t
:Tab
输入:
cin >>
:将空格(空格、制表符等)视为终止字符getline(cin, fullname)
:读取一行文本
省略命名空间:using namespace std;
竞赛必用
C样式字符串:char greeting2[] = "Hello";
数组
声明:
string cars[4];
省略数组元素string cars[] = {"Volvo", "BMW", "Ford"};
省略数组大小int myNum[3] = {10, 20, 30};
大小:
sizeof()
返回 字节- 多少个元素:
sizeof(myNumbers) / sizeof(myNumbers[0]
结构体
创建:struct
+ 结构体名
1 | struct { // Structure declaration |
访问:.
命名结构:
1 | struct myDataType { // This structure is named "myDataType" |
enum
enum 表示一组常量(不可更改的值)
创建:
1 | enum Level { |
声明:enum Level myVar = HIGH;
访问:
- enum 第一项为0,第二项为1,以此类推
- 可以更改值
引用
&
:对现有变量的“引用”
引用变量:
1 | string food = "Pizza"; |
获取地址:
1 | string food = "Pizza"; |
指针
指针:将内存地址存储为其值的变量,指向相同类型的数据类型
创建:*
1 | string food = "Pizza"; |
解引用:*
- 使用指针来获取变量的值
- 修改原始变量的值
函数
**重载:**相同的名称但具有不同的参数(数量和、类型)
1 | int myFunction(int x) |
**局部变量:**函数内
**全局变量:**都可访问(同名:1个函数内用 - 1个函数外用)
类
创建:class
访问说明符:public
1 | class MyClass { |
方法
内部定义:
1
2
3
4
5
6
7
8
9
10
11class MyClass {
public:
void myMethod() {
cout << "Hello World!";
}
};
int main() {
MyClass myObj;
myObj.myMethod(); d
return 0;
}外部定义:
::
1
2
3
4
5
6
7
8
9
10
11
12class MyClass {
public:
void myMethod();
};
void MyClass::myMethod() {
cout << "Hello World!";
}
int main() {
MyClass myObj;
myObj.myMethod();
return 0;
}
构造函数
可以在类外部定义
- 无参构造
- 含参构造
访问说明符
public
:成员可从类外部访问private
:无法从类外部访问(默认)protected
:不能从类外部访问,可以在继承的类中访问
封装
- 类的声明:
private
get
,set
方法
1 |
|
继承
:
继承方式:
public
:父类的public
成员仍然是public
,protected
仍然是protected
protected
:父类的public
成员变为protected
,protected
保持不变private
:父类的public
和protected
成员变为private
父类的 private
:仍然存在于子类中,但无法直接访问
1 | class MyClass { |
多态
方法重写:
1 | class Animal { |
文件
调用库:#include <iostream>
,#include <fstream>
类 | 描述 |
---|---|
ofstream |
创建和写入文件 |
ifstream |
读取文件 |
fstream |
创建、读取和写入文件 |
创建:ofstream
或 fstream
写入:MyFile << "...";
关闭:MyFile.close();
1 |
|
读取:
ifstream
或fstream
while
+getline
1 | string myText; |
异常
try
:定义代码块,在执行代码块时对其进行错误测试throw
:检测到问题时引发异常catch
:在 try 块中发生错误时要执行的代码块(与try
成对出现)
1 | try { |