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仍然是protectedprotected:父类的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或fstreamwhile+getline
1 | string myText; |
异常
try:定义代码块,在执行代码块时对其进行错误测试throw:检测到问题时引发异常catch:在 try 块中发生错误时要执行的代码块(与try成对出现)
1 | try { |






