C++零碎知识记录
C++零碎知识记录
**一、**else总是与尽可能近的if配对
二、
switch语句的使用:
1 | switch(表达式){ |
三、各种运算符的优先级
C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:
**第1优先级:**各种括括号,如()、[]等、成员运算符 . ;
**第2优先级:**所有单目运算符,如++、–、!、~等;
**第3优先级(算数运算符):*乘法运算符、除法运算符/、求余运算符%;
**第4优先级(算数运算符):**加法运算符+、减法运算符-;
**第5优先级(移位运算符):**移位运算符<<、>>;
**第6优先级(条件运算符):**大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=;
**第7优先级(条件运算符):**等于运算符==、不等于运算符!=
**第8优先级(按位运算符):**按位与运算符&
**第9优先级(按位运算符):**按位异或运算符^
**第10优先级(按位运算符):**按位或运算符|
**第11优先级(逻辑与运算符):**逻辑与运算符&&
**第12优先级:**逻辑与运算符:逻辑或运算符||
第13优先级:三目条件运算符 ?
**第14优先级:**各种赋值运算符,如=、+=、-=、=、/= 等
第15优先级:逗号运算,
四、
数组的起始地址是一个常量指针,不可对其进行自加自减操作
五、
继承时,父类的所有属性都会继承到子类中,只是私有属性被编译器隐藏了,无法看到也无法访问,表现为“没有继承”
问号运算符——唯一一个三目运算符
表达式一 ?表达式二 :表达式三
如果表达式1成立,则输出表达式2的值,否则输出表达式3的值。
1 | int a=1,b=2,c=0; |
逗号运算符:
表达式1,表达式2
求解过程:先求表达式1,再求表达式2,最后结果为表达式2,即:从左往右求结果,最后结果为最右边的表达式
示例:
1 | int x,a; |
注意:逗号运算符的运算优先级是最低的
1 | x=a=3,6*a; |
八、
指向同一数组的两个指针相减,其结果为两个指针所指向的元素下标之差
九、
字符数组不可以用“=”赋值
十、
构造函数和析构函数都不能被继承
基类的友元对从该基类派生的类型没有特殊访问权限,即友元关系不能被继承
**十一、 ** 赋值兼容规则
- 派生类的对象可以赋值给基类,基类的对象不可以赋值给派生类对象
- 基类的指针可以指向派生类,派生类的指针不可以指向基类
- 基类的引用可以作为派生类的别名,反之则不行
发生赋值兼容后,子类对象只能被作为父类对象使用,即只能使用从父类继承而来的成员。
十二、构造和析构的顺序
- 当创建子类时,先执行父类的构造函数,再执行子类的构造函数
当析构子类时,先执行子类的析构函数,再执行父类的析构函数
-
当一个类作为对象成员时:
构造时,先调用对象成员的构造函数,再调用包含对象成员的类的构造函数
析构时,先调用包含对象成员的类的析构函数,再调用对象成员的析构函数
十三、
构造函数不能被说明为虚函数
十四、
常函数:
-
成员函数后加const,变成常函数
示例:
1
void show() const{}
-
常函数内不可以修改成员属性
-
成员属性加上关键字 mutable 后,在常函数中可以修改
1
mutable int a;
常对象:
- 声明对象前加const称为常对象
- 常对象只能调用常函数
十五、
面向对象三大特性:封装,继承,多态
十六、
在vector中,插入和删除操作会使当前迭代器失效。因为动态管理内存是重新分配空间。





