volatile
volatile 关键字是一种类型修饰符,用它声明的变量表示可以背某些编译器未知的因素修改,用volatile告诉编译器不应对这些变量进行优化。
const 可以是volatile 指针可以是volatile;
assert()
断言,宣称的意思。他是宏而非函数。它的作用是如果条件返回错误,则终止程序运行。可以通过定义NDEBUG来关闭assert()
#define NDEBUG // 加上这行,则 assert 不可用 #include <assert.h> assert( p != NULL ); // assert 不可用
,但是需要在源代码的开头,#include<cassert>之前
extern
extern "C"
的作用是让 C++ 编译器将 extern "C"
声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和C语言库中的符号进行链接的问题。
C++ 中 struct 和 class
struct 更适合看成数据结构的实现体,class更适合看成对象的实现体
区别
最本质的区别是默认访问控制权限,struct默认是public,class默认是private
explicit
explicit修饰构造函数是,可以防止隐式转换和复制初始化,
explicit修饰转换函数时,可以防止隐式转换,但按语境转换除外
friend 友元类和友元函数
能访问私有成员
能破坏封装性
右元关系不可传递
右元关系的单行性
右元声明形式及数量不收限制
宏
宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对 “参数” 进行的是一对一的替换。
面向对象三大特征 —— 封装、继承、多态
封装-把客观事实封装为抽象类,并且类可以把自己的数据和方法只让可信的类或对象操作。
继承-子类继承父类
多态-即多种形态,我们可以将多态定义为消息以多种形式显示的能力
多态分类:1重载多态,2子类型多态 ,3.参数多态,4.强制多态
静态多态(编译期/早绑定)
class A { public: void do(int a); void do(int a, int b); };
动态多态(运行期期/晚绑定)
虚函数:用 virtual 修饰成员函数,使其成为虚函数
动态绑定:当使用基类的引用或指针调用一个虚函数时将发生动态绑定