(项目向),作为 OI 一些不常用的东西的补充。
流操作(iomanip.h)
具体操作见书
函数
函数参数初始化
int example(int x, int y = 7, int z = 10) {
return x + y + z;
}
example(2);//调用
以下写法是错误的,只能将初始化的参数放在右边
int error(int x, int y = 10, int z) {
return x + y + z;
}
static变量
方式:
static int a;
定义的a不会因为退出函数而消失,而是在整个程序完成后才消失
指针
定义
int *a, *b;//定义了两个int类型指针
指针赋值(地址)
int i = 10;
a = &i;//&i取地址
指针对应值
int value = *a;
常量指针
不能改变内存指向:
int *const p = &a;
不能改变值:
int const *p = &a;
不能改变内存指向、也不能改变值:
int const *const p = &a;
指针函数
int max(int a, int b) {return a > b ? a : b;}
int min(int a, int b) {return a > b ? b : a;}
int (*func)(int, int);
func = &max; cout << func(3, 6) << endl;
func = &min; cout << func(3, 6) << endl;
引用
右值引用 (C++11)
int get() {int a = 9; return a;}
int &&k = get() + 4;
//int &k = get() + 4;是错误的
Struct和枚举类型
枚举类型
enum dog{Taidi, Jinmao, Hashiqi};
并且默认
enum dog{Taidi=0, Jinmao=1, Hashiqi=2};
可以人为修改,只修改部分则后面按顺序单调增长
类型推导 (C++11)
Type k = sv;
decltype(k) p = sv;
union共用体
union {
int i;
char ch;
double db;
}u;
union mn{
int i;
char ch;
double db;
}u;
相当于只有一个值可用,就是最后赋值的值,不是三个值的struct
面向对象
类和对象
构造函数
class a {
int x, y;
a(){//构造函数
x = 1, y = 0;
}
a(int x, int y){//重载构造函数
this->x = x, this->y = y;
}
};
析构函数
析构函数:没有返回值没有参数 销毁时调用
class a {
int x, y;
a(){//构造函数
x = 1, y = 0;
}
a(int x, int y){//重载构造函数
this->x = x, this->y = y;
}
~a() {//析构函数 没有返回值没有参数 销毁时调用
x = 888, y = 888;
}
};
访问
public:公开
private:私有,仅本类可用
protected:私有,派生类可用
友元
class b {
int u, v;
};
int whw(a hh) {return hh.x + hh.y;}
class a {
private:
int x, y;
friend class b;//友元类
friend int whw(a hh);//友元函数
};
继承
定义
class a {
protected:
int x, y;
};
class b : public a {};//b是a的派生类
//public:基类是什么就是什么
//private:不能访问基类private
//protected:所有基类的public,protected都继承为protected
构造/析构函数访问顺序
构造函数:由父类到子类
析构函数:由子类到父类
父类构造函数有参数情况
class a {
private:
int x, y;
protected:
a(int u, int v) {x = u, y = v;}
};
class b : public a {
b(int u, int v) : a(u, v) {}//显示调用父类构造函数
};