阶段复习

1、x86结构的CPU(包括32位和64位)一个字都是16位(2个字节); 2、成员对象构造函数按照在类中的声明顺序调用,与初始化表顺序无关; 3、IEEE浮点数在内存中仍然以小端方式存放,例如10.125f在内存中是: 4、VC6 debug模式,先定义的变量在高地址,后定义的变量在低地址,并且变量都放在模4地址上,

异常处理

拾遗 VC6 watch窗口,变量名输入@err,hr 可以看错误信息,相当于GetLastError。 abort() 给出提示,终止程序。 terminate() 用于终止程序,会调用abort()。 断言宏: 例: assert后面的表达式为假(表达式不成立)时,报错,win环境只有在debug版有效。 部分C库

模板

函数模板 泛型编程: 从语法角度,C++的实现方式是模板,类型参数化。 语法: 因为class可能产生误解,所以推荐另一种写法: 函数模板只能写在全局或者类中,不能写在函数中。 模板声明和实现要写在一起,一般放在头文件.h中。 模板函数隐式实例化: 模板函数显示实例化: 各编译器对模板支持不同,尽量用标准写法。 不调用

运算符重载2_智能指针

运算符重载2 不能重载的运算符: . :: # ?: 前三个符号因为太特殊不能重载,最后一个是三元运算符,需要三个参数所以不能重载。 基本运算符不能在全局重载,C++规定有四个运算符 =, ->, [], ()不可以是全局中的重载, 即:不能重载为友员函数,只能重载为成员函数。 new重载,空时不调构造,非空时走构造。

运算符重载

运算符重载 重载已有运算符,赋予新功能。 语法: 返回类型 operator运算符 (形参) 在类中重载,形参有一个,表示运算符左边为对象,右边为形参,例如obj + 1; 在全局重载,形参有两个,从左至右分别表示运算符左边的参数、运算符右边的参数,例如1 + obj。 以“+”为例,类中有两个重载,分别是operat

抽象类_虚继承_多继承内存布局

抽象类 抽象类基本概念: 1、有些类不应该产生对象,例如,画个动物,画个图形,都具有多义性,不应该产生对象; 2、一个类至少有一个纯虚函数,这个类就是抽象类,例如: 3、抽象类无法实例化对象,写成员函数无意义; 4、使用时,当基类指针使用; 5、如果派生类没有实现纯虚函数,那么派生类也是抽象类; 6、抽象类中的纯虚函数

虚函数2

拾遗 初始化表顺序与构造顺序无关,因为初始化表是程序员定义的,如果与构造顺序有关,就破坏了编译器的规则。 虚函数不加内联(inline),因为虚函数是运行时多态,inline只能在编译期间展开,所以虚函数不会内联。 虚函数2:虚表 1、如果一个类至少有一个虚函数,那么类对象就会产生一个指向虚表的指针; 2、指向虚表的指

继承内存布局_虚函数

拾遗 成员函数指针示例: 继承的内存布局 基类的数据成员(低地址) 派生类数据成员(高地址) 派生类的大小: 基类的大小 + 派生类新加成员大小 构造顺序: 1、基类 2、成员对象按照定义顺序构造 3、类自己 析构顺序与构造顺序相反 派生类指针转基类指针,合法,常用; 基类指针转派生类指针,不合法,不强转时编译报错,会