C++

1、 位移操作

<< 高位弃,低位补0,符号位被移除表示溢出
>> 低位弃,高位(无符号数补0)(有符号数,负数补1,正数补0)

2、 类型转换

隐式类型转换 :低–>高
显示类型转换:
int (z)
(int) z
static_cast < i n t int int> (z)

3、 sizeof

sizeof(类型名)或sizeof(表达式)
sizeof(short) = 2

4、 伪随机数

头文件 < c s t d l i b > <cstdlib> <cstdlib>
srand(0); //伪随机数种子,产生不同的随机数序列
M = rand() % n; // 产生 0~ n-1的随机数

5、 操作符

%: 操作数为整数
表达式,先计算左边再计算右边,返回最右边值
/: 操作数为整数,结果取整;有一操作数为浮点数则结果取浮点数
关系运算符 < > <= >= 优先级高于 == !=
逻辑运算符 返回bool, && || 短路性质(左为真/假,不计算右了)
= 优先级高于,条件表达式优先级高于 =
条件表达式 表达式1?表达式2:表达式3 (2和3类型可不同,返回2、3中类型较高者)

6、 位运算

&: 将某位至0: a = a & 1111110
取a最低几位: c = a & 00000011

|: 将低8位至为1: a = a | 0xff

^: 不同为1, 相同为0
~: 取反

7、 别名

typedef 已有类型 新名字 (C)
using 新名 = 已有名 (C++)

8、 枚举类型

enum Weekday = {SUN, MON, TUE, WED, THU, FRI, SAT}(默认从0开始)
enum Weekday = {SUN = 7, MON = 1, TUE, WED} (TUE = 2, WED = 3)

定义一个枚举值:

  1. Weekday day;
  2. enum Weekday day = SUN; (enum 可有可无,day可初始化)
  3. day = Weekday(1); (整数需要强制转换类型)

9、c++11枚举类

enum class Type {}; // 类型为int
enum class Type:char{}; // 类型为char
比枚举类型的优点:

  1. 强作用域 Type::General 避免重名
  2. 禁止隐含将其转换为整数
  3. 可以指定底层类型

10、 函数

  1. 函数被 调用时才分配形参存储单元
  2. 定义引用必须初始化且不能更改
  3. 默认值参数放到最右边,形实结合是从左到右;声明时指定形参默认值,定义时不能再写。
  4. 函数不能将非静态的局部地址返回

11、 内联函数

  1. 内联函数不能有循环和switch语句
  2. 内联成员函数,在类内实现或者在类内声明带inline的函数原型,在类外实现

12、 结构体 联合体

  1. 结构体不声明成员属性,默认是公有,类相反
  2. 联合体成员共用存储空间
    union Mark{ … };
    无名联合体 union { int i; float f; };
    i =2; f = 9; // i就没了

13、 类

  1. 访问属性(友元函数都能访问)
    private 成员只能被本类成员访问
    protected 成员可以被本类及其派生类成员访问,类外不可访问
    public 成员可以被所有类成员以及类对象访问
  2. 继承
    private继承,基类的所有成员变成子类的private成员,只能在本类成员中使用
    protected继承,基类public和protected成员变成子类protected成员,private成员属性不变
    public继承,基类所有成员属性不变
13.1、构造函数
  1. 可内联,可重载,不可为虚函数
  2. 默认构造函数:
    Clock();
    Clock(int newH= 0 , int newM = 0, int newS = 0);
    不能同时出现
  3. 没有初始值,则为垃圾数据
  4. 自己定义了有参构造函数,系统就不会生成默认构造函数了
    若, Clock c; // 报错
    c++11: Clock() = default; // 让编译器还生成默认构造函数
13.2、复制构造函数

声明: 类名 (const 类名& 本类对象);
三种调用情况:

  1. 赋值
  2. 形实结合
  3. 函数返回类对象

有指针时不能使用默认的浅层构造函数
c++11: Point(const Point&p) = delete; // 指示编译器不要默认生成

例: Line line(p1, p2); // 4次 Point copy
Line line2(line); // 一次Line copy中有两次 Point copy

13.3、类的组合

定义: 类的成员是另一类对象
类名::类名(对象成员参数…, 本类成员参数…):对象1(参),对象2(参)…{}
次序:按照成员在类中声明的顺序,不按照初始化列表顺序

13.4、类间的相互引用

类声明之前不能声明该类对象,不能在内联中使用该类对象

class B;
class A{
public:
   void f(B b);
};
class B{
public:
   void g(A a);
};
// 正确
class B;
class A{
public:
   B b;
};
class B{
public:
   A a;
};
// 错误,B占多少字节都不知道
13.5、类的友元

声明时加friend关键字,定义时不写

13.6、继承。
  1. 构造和析构函数不被继承,c++11可以用using继承构造
  2. 公有派生可转换为基类,但对象只能访问基类继承而来的函数。
  3. 不要重写继承而来的非虚函数
  4. 派生类的构造函数的顺序:
    先构造父类:若是多继承,按继承时声明的顺序自左向右构造;
    再构造组合类:与初始化列表顺序无关,按类内定义的顺序构造;
    最后构造派生类成员。

14、常类型(const)

  1. 常对象:定义时初始化且不能被更新
  2. 常成员函数:处理常对象,不改变成员状态
  3. 声明和定义时都带const
  4. const是区分重载的因素
  5. 常对象和普通函数都可调用常函数,常对象只能调用常函数
  6. 常成员变量只能在初始化列表中初始化

15、多态

  1. 静态多态,重载,编译阶段
    形参类型不同或个数不同,和返回值类型无关,函数功能要相同

16、作用域

  1. #include" .h" //从自己文件目录中找,再从系统目录找
  2. #include<> // 从系统目录找
  3. 文件作用域的变量为外部变量,只要在使用前声明
  4. namespace{} // 只能在当前文件中使用
  5. 静态生存周期:文件作用域或static修饰的变量

17、静态类型

  1. 类的所有对象共享,类内声明类外初始化
  2. 静态函数处理静态数据
  3. 类外定义时不加static关键字
  4. Point::showCount(); a.showCount();
  5. 不能用非静态变量去初始化静态指针
  6. 只有整数0可以赋给指针,可以和指针比较,表示空指针;c++11 nullptr表示空指针
  7. 静态成员函数没有this指针

18、数组

  1. 只对数组部分元素初始化,剩余元素为0
  2. int a[10], *p;
    p = &a[0] / p = a;
    a[i] = *(p+i) = p[i] = *(a+i)
  3. 多维数组
    int(p)[9][8] = new int [7][9][8]
    ((
    (p+i)+j)+k) = p[i][j][k]

19、文件读写

getline(cin, s2); // 读入整行,包括空格,换行结束
getline(cin, s2, ‘,’) // ,结束
cin>>c; // 遇到空格结束

20、C++11

  1. CONSTEXPR函数
    constexpr int getSize() {return 20;} //编译前可计算,程序中可用来赋值
  2. 基于范围的for循环
    for(int* p = array; p < array+sizeof(array)/sizeof(int);++p)
    ⇒ for(int & e: array) // 每个元素是e
  3. 智能指针:
    unique_ptr: 不允许多指针共享资源,可以用move函数转移指针,转移后就失效了
    shared_ptr: 多个指针可指向共同的内存单元
    weak_ptr: 可复制shared_ptr指向的单元,但其构造或释放对资源不产生影响
  4. 移动构造
class IntNum {
IntNum(int x = 0):p(new int(x)){} // 构造函数
IntNum(const IntNum& n):p(new int(*n.p)){} // 复制构造
IntNum(IntNum&& n):p(n.p){ n.p = nullptr; } // 移动构造
private:
 int* p;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值