C++ 基础知识

(项目向),作为 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) {}//显示调用父类构造函数
};
------ 本文结束 ------