- 转换函数
转换函数无参数,不用写返回类型(但必须有返回值)。
例如operator double () const {...}
- 在构造函数前加explicit 关键字可以阻止编译器隐式调用构造函数将其他类型变为构造类型。
- point-like classes
有智能指针和迭代器(一直特殊的智能指针)两种用法。
智能指针需要重载* (直接return *sp
) ->(直接return sp
)两个操作符,其中->操作符作用后会继续传递下去。
迭代器除了需要重载* -> 之外还需要重载== != ++(后置,无参数) ++(前置 有一个参数) --
- function-like classes
重载operator()的一种类 - 使用namespace
namespace std {..}
命名空间std 内容全部写在括号内。 - 函数参数列表中一个是传值,一个是传引用不构成函数的重载。返回值不同也不构成函数的重载。一个函数是否是常量函数也构成函数的重载。
- 常量指针:
const int* p1;
此处的const修饰的是*,即表示指针p1指向的是一个常量。
指针常量:int x; int* const p2 = &x;
此处的const修饰的是p2,即p2是常量,一个指向int型的指针常量,(常量在定义的时候必须被赋值).此指针不可以被重新赋值.数组名其实就相当于一个指针常量,因此数组名不可以被重新赋值。 引用类型也可以看成是一种指针常量,因其声明时必须被初始化,且不可改变其指向的对象。
特殊情况:int i; int const * pi = &x;
此处说明pi指向的位置中所存的内容不能通过修改*pi的方式来改变.
对于指针常量和常量指针的口诀:对于const和* 两个字符,在前先读(分别读成指针常量,常量指针),在前不变(const在*号表示指针所指的数据不变,const在变量名前表示指针为常量)。
指向常量的指针常量const char * const a;
- C++动态分配内存 内存状态图(complex类包含两个double成员变量)(string中包含一个char指针)(左边为debugger模式,右边为release模式)
- (32位系统中)对于类成员如果时空类占1个字节,如果有虚函数,每个虚函数会有一个vptr指针占4个字节,如果有静态类成员变量,其在global date memory中,在类实例化中不单独占用内存。类的成员函数不占用类的大小。
类在内存中占用的空间与成员变量的顺序也有关系。同时遵循数据对齐原则。