C++ 速通
约 391 个字 83 行代码 2 张图片 预计阅读时间 2 分钟
Abstract
感觉平时用的到的主要就是面向对象的一些知识还有STL了,简单看一下至少能手敲出一篇能跑的代码。
本文档只是 cheatsheet,用来让 Slow 翻一下代码该怎么写(x)
一、语法
#include <iostream> // Needed to perform IO operations
using namespace std;
int main() { // Program entry point
cout << "hello, world" << endl; // Say Hello
return 0; // Terminate main()
} // End of main function
二、面向对象
2.1 语法
类的成员函数可以在类内直接给出定义,也可以在类内只声明,在类外给出定义。
class Foo {
int x = 0;
void foo(int v) { x += v; }
void bar(int v);
};
void Foo::bar(int v) { x += v; }
int main() {
Foo f;
f.bar(1); // Error: 'bar' is a private member of 'Foo'
}
2.2 访问控制
- C++ 里 class 里面默认 private, struct 默认 public。
声明方式:
struct User {
private:
int id, age;
char* password;
public:
bool checkPassword(char* pw); // check if pw == password
void setAge(int v) {
if (v >= 0)
age = v;
}
int getAge() { return age; }
// ...
};
2.3 继承和多态
class Circle : public Shape { // Circle 继承 Shape
public:
int radius; // 独有的成员变量
void do_draw() {
// 画圆!
}
};
class Rectangle : public Shape { // Rectangle 继承 Shape
public:
int width, height; // 独有的成员函数
void do_draw() {
// 画长方形!
}
};
2.4 内联 inline
考虑编译器优化的时候需要考虑这个!Tutorial
2.5 构造函数
函数名和类名相同,会在创建对象的时候执行。构造函数并没有名字,因此永远无法被用名字找到。

可以传递参数:
class Container {
elem* val;
// ...
public:
Container(unsigned size = 512) { // 默认参数:512!
val = (elem*)malloc(sizeof(elem) * size);
// ...
}
// ...
};
调用的时候可以直接写: Container c2(64);。
函数重载:
class Container {
elem* val;
// ...
public:
Container() { val = nullptr; }
Container(unsigned size) {
val = (elem*)malloc(sizeof(elem) * size);
}
Container(unsigned size, elem initVal) {
val = (elem*)malloc(sizeof(elem) * size);
for (unsigned i = 0; i < size; i++) {
val[i] = initVal;
}
}
};
此时:使用 Container c1, c2(4), c3(6, 2); 定义三个对象时,会分别使用无参、一个参数和两个参数的构造函数。
Tips:独立函数也可以重载,重载规则比较复杂,具体需要查阅;
double abs(double);
int abs(int);
abs(1); // calls abs(int);
abs(1.0); // calls abs(double);
2.6 New/Delete
new表达式干的事情是申请内存 + 调用构造函数,返回一个指针;而delete表达式干的事情是调用析构函数 + 释放内存。

- 如果
p在new的时候创建的是单个对象,则应该用delete p;的形式 (single-object delete expression) 回收;如果p在new的时候创建的是数组,则应该用delete[] p;
2.7 空指针
void f(int *);
void f(int);
f(nullptr); // f(int *) is called