1、加、减、乘、除操作符的重载
概要:重载函数放在类中,返回值类型为 Complex
类类型,参数类型为const Complex&
Complex operator +(const Complex& obj);
Complex operator -(const Complex& obj);
Complex operator *(const Complex& obj);
Complex operator /(const Complex& obj);
Complex Complex::operator +(const Complex& obj)
{
Complex ret;
ret.a = this->a + obj.a;
ret.b = this->b + obj.b;
return ret;
}
Complex Complex::operator -(const Complex& obj)
{
Complex ret;
ret.a = this->a - obj.a;
ret.b = this->b - obj.b;
return ret;
}
Complex Complex::operator *(const Complex& obj)
{
double pa = a * obj.a - b * obj.b;
double pb = a * obj.b + b * obj.a;
Complex ret(pa, pb);
return ret;
}
Complex Complex::operator /(const Complex& obj)
{
double pc = obj.a * obj.a + obj.b * obj.b;
double pa = (a * obj.a + b * obj.b) / pc;
double pb = (b * obj.a - a * obj.b) / pc;
Complex ret(pa, pb);
return ret;
}
2、 ==、!= 操作符重载
概要:重载函数放在类中,返回值类型为 bool
类型,参数类型为const Complex&
bool operator ==(const Complex& obj);
bool operator !=(const Complex& obj);
bool Complex::operator ==(const Complex& obj)
{
return (this->a = obj.a) && (this->b = obj.b);
}
bool Complex::operator !=(const Complex& obj)
{
return (!(this == &obj));
}
3、= 操作符重载
概要:重载函数只能放在类中,返回值类型为 Complex&
类型,参数类型为const Complex&
Complex& operator=(const Complex& obj);
Complex& Complex::operator=(const Complex& obj)
{
if (this != &obj)
{
this->a = obj.a;
this->b = obj.b;
}
return *this;
}
4、数组操作符重载
概要:重载函数只能通过类的成员函数重载,返回值类型为 int 类型,参数类型为int i
,这个的返回值类型和参数类型都是不确定的。
int operator[](int i)
int IntArray::operator[](int i)
{
return m_pointer[i];
}
5、函数操作符重载
概要:重载函数只能通过类的成员函数重载,返回值类型为 int
类型,参数类型为()
,这个的返回值类型和参数类型都是不确定的,可以定义不同参数的重载函数。
int operator()();
6、逻辑操作符重载
概要:重载函数通过全局函数函数进行重载,返回值类型为 bool
类型,参数类型不确定
bool operator &&(const Test& l, const Test& r);
bool operator ||(const Test& l, const Test& r);
bool Test::operator &&(const Test& l, const Test& r)
{
return (l.getI() && r.getI());
bool operator ||(const Test& l, const Test& r)
{
return (l.getI() || r.getI());
}
7、逗号操作符重载
概要:重载函数通过全局函数函数进行重载,返回值类型为 类引用 类型,参数类型为const Test&
Test& operator,(const Test& a, const Test& b);
Test& Test::operator,(const Test& a, const Test& b)
{
return const_cast< Test& >(b);
}
8、前置操作符和后置操作符
全局函数和成员函数均可进行重载(推荐成员函数重载);重载前置 ++ 操作符不需要额外的参数;重载后置 ++ 操作符需要一个 int 类型的占位参数
Test& operator++();
Test operator++(int);
Test& Test::operator++() //前置++重载
{
++i;
return *this;
}
Test Test::operator++(int) //后置++重载
{
Test ret(i);
i++;
return ret;
}