3.关于自增自减运算符的使用:
  (1) 前缀自增自减运算符
  a.表达式的值是增减以后的值
  b.运算函数返回的是操作数的引用
  c.成员函数形式的运算符函数没有参数,友元函数形式的运算符函数只有一个参数:操作数
  d.可以连用

 

class A
{ A& operator++(){  ++m_r;++m_i;return *this;}};//成员函数形式
A& operator(A& a)//友元函数形式
{
++m_r;++m_i;
return a;
}

  注意:加引用是为了连续使用;
  (2) 后缀自增自减运算符
  a.表达式的值是增减以前的值
  b.运算函数返回的是操作数增减以前的副本
  c.成员函数形式的运算符函数有int类型的哑元参数,友元函数形式的运算符函数有两个参数:操作数  和 哑元
  d.不可以连用
  class A
  { const A operator++(int){return(m_r++,m_i++);}};//成员函数形式
  const A operator++(A& a,int)//友元函数形式
  { return A(a.m_r++,a.m_i++);}
  注意:加const是为了防止连续运算
  4. 类型转换运算符函数
  4.1格式:
  在源类型中定义如下形式的运算符函数
  operator 目标类型(void)
  {
  构造一个目标类型的对象返回(目标类型也可以是基本数据类型)
  }
  功能:
  将一个类的对象转换成另一个类型的数据,该函数没有返回值类型;
  注意:
  如果在源类型中提供类型转换运算符函数的同时,在目标类型中定义支持类型转换的构造函数,对于隐式类型转换,系统会优先选择类型转换运算符函数完成转换,而对于显式类型转换,系统优先选择构造函数(建议只提供构造函数即可,因为可以使用explicit 关键字修饰构造函数,表示该构造函数只能用于显示类型转换,从而防止潜在的错误;)
  扩展:
  如果一个类类型对象和一个基本数据类型运算时,怎么处理?
  Complex c(2,3);
  cout << "c + 100 " << c + 100 << endl;//c.operator+(100);
  5.不允许用户重载的运算符
  ::作用域解析操作符
  . 成员访问操作符
  .* 成员指针解引用
  ?: 三目运算符
  sizeof  字节长度运算符
  typeid  类型信息操作符
  注意:
  (1)操作符的操作数中没有类类型的操作数时,不能重载
  (2)不能通过运算符重载去发明新的操作符,比如:**  注意:加引用是为了连续使用;
  (2) 后缀自增自减运算符
  a.表达式的值是增减以前的值
  b.运算函数返回的是操作数增减以前的副本
  c.成员函数形式的运算符函数有int类型的哑元参数,友元函数形式的运算符函数有两个参数:操作数  和 哑元
  d.不可以连用
  class A
  { const A operator++(int){return(m_r++,m_i++);}};//成员函数形式
  const A operator++(A& a,int)//友元函数形式
  { return A(a.m_r++,a.m_i++);}
  注意:加const是为了防止连续运算
  4. 类型转换运算符函数
  4.1格式:
  在源类型中定义如下形式的运算符函数
  operator 目标类型(void)
  {
  构造一个目标类型的对象返回(目标类型也可以是基本数据类型)
  }
  功能:
  将一个类的对象转换成另一个类型的数据,该函数没有返回值类型;
  注意:
  如果在源类型中提供类型转换运算符函数的同时,在目标类型中定义支持类型转换的构造函数,对于隐式类型转换,系统会优先选择类型转换运算符函数完成转换,而对于显式类型转换,系统优先选择构造函数(建议只提供构造函数即可,因为可以使用explicit 关键字修饰构造函数,表示该构造函数只能用于显示类型转换,从而防止潜在的错误;)
  扩展:
  如果一个类类型对象和一个基本数据类型运算时,怎么处理?
  Complex c(2,3);
  cout << "c + 100 " << c + 100 << endl;//c.operator+(100);
  5.不允许用户重载的运算符
  ::作用域解析操作符
  . 成员访问操作符
  .* 成员指针解引用
  ?: 三目运算符
  sizeof  字节长度运算符
  typeid  类型信息操作符
  注意:
  (1)操作符的操作数中没有类类型的操作数时,不能重载
  (2)不能通过运算符重载去发明新的操作符,比如:**