复制控制

  1、若要禁止复制,必须声明其复制构造函数为private,若想友元和成员中的复制也禁止,可以声明但是不定义一个private的复制构造函数。

  2、如果没有显式定义复制构造函数或者赋值操作符,编译器通常会提供一个默认的。

  3、当定义一个新对象,并用一个同类型的对象对他进行初始化时,将显式使用复制构造函数;当将该类型的对象传递给函数或从函数返回值返回该类型的对象时,将隐式使用复制构造函数。

  4、使用未定义的成员的任何尝试将导致链接错误。

  5、如果定义了复制构造函数,编译器不会自动生成默认构造函数,所以要自己定义默认构造函数。

  6、合成析构函数并不删除指针成员所指向的对象。

  7、即使编写了自己的析构函数,合成析构函数仍然运行。当撤销对象时,先运行自定义的析构函数,然后运行合成析构函数。

  重载操作符

  1、::,.*,.,?:不可重载。

  2、重载操作符必须具有一个类类型的操作数或枚举类型。优先级和结合性是固定的且不具备短路求值的特征。

  3、除了函数调用操作符operator()之外,重载操作符时使用默认实参是非法的。

  4、操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元。为的是可以访问类的私有成员。

  5、=,(),[],->操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。而复合赋值操作符如+=通常定义为成员,但是定义为非成员,编译时不会出错。改变对象状态的操作符如自增操作符要定义为成员函数。算数的,相等的,关系操作符位操作符一般定义为普通函数。箭头操作符必须定义为类的成员函数,解引用操作符不要求定义成员。()调用操作符必须声明为成员函数,一个类可以定义多个调用操作符版本。定义了调用操作符的类,其对象称为函数对象。即它的行为是类似函数的对象。

  6、为了与内置类型保持一致,加法返回一个右值,而不是一个引用。

  7、类定义下标操作符时,一般需要定义两个版本:一个为非const成员并返回引用;一个味const成员并返回const引用。

  8、前缀操作符:A& operator++();.后缀操作符:A& operator++(int);int形参只是一个标识,没有实际用途。

  9、转换操作符 operator type();type表示内置类型名,类类型名,由类型别名定义的名字。对任何可作为函数返回类型的类型(除了void外)都可以定义转换函数。不允许转换为数组类型或函数类型。转化为指针类型(数据或函数指针)以及引用类型时可以的。转换操作符函数必须是成员函数,不能指定返回类型,形参表为空。

  10、只能用一个类类型转换,即,定义a能转换为b,b能转换为c,但a不能转换为b再转换为c。