1、 算术运算符重载(+ - * /)
friend const 类名 operator +(- * /)(const 类名& 对象名,const 类名& 另一对象名) ;
声明部分:
friend const Complex operator+(constComplex& x, const Complex& y);
实现部分:
constComplex operator+(const Complex& x,const Complex& y);
{
return Complex(x._r + y._r, x._i + y._i);//返回一个const对象
}
2、 输出运算符重载(<<或>>)
friend ostream& operator<<(ostream& out,const类名& 对象名);
声明部分:
friend ostream& operator<<(ostream&out,const Complex& x);
ostream& operator<<(ostream&out,const Complex& x)//ostream为一个类,返回一个对象的引用
{
out<<”_r= “<< x._r<<endl;//输出一个对象的成员变量_r
out<<”_i= “<< x._i<<endl;//输出一个对象的成员变量_i
return out;//返回一个引用对象
}
3、下标运算符重载[]
const版本:const 类名/数据类型 &operator[](int index)const;
非const版本:类名/数据类型 & operator[](int index);
实现部分:
const int& operator[ ](int index) const//const版本的下标运算符
{
return rep[index];//下标运算符重载返回值类型为引用
}
int& operator[ ](int index)//非const版本的下表运算符
{
return rep[index];
}
4、赋值运算符重载(=)+=,-+,*=,/=重载方式一样
const 类名&operator=(const 类名& 对象名)
{
第一步:判断是否自赋值
第二步:释放旧空间
第三步:申请新空间,实现内容的拷贝
第四步:返回自身对象的引用
}
const Account&Account::operator=(const Account &account)
{
//step 1
if (this != &account)//第一步:判断是否是自赋值。指向account是否为空,指针变量的值等于另一个变量的地址
{
//step 2
delete [] this->title;//第二步:释放旧空间
//step 3
this->title = new char[strlen(account.title)+1];//第三步:申请新空间,实现内容的拷贝。
strcpy(this->title, account.title);
strcpy(this->owner, account.owner);
this->balance = account.balance;
}
//step 4。
return *this;//第四,我们返回*this来实现函数链式调用
}
5、++和——运算符重载(前置和后置的区别)>,<,£,³运算符也是这样来定义
前置:类名& operator++();
后置:const 类名 operator ++(int);
Fraction& operator ++( ) // 前置++,返回一个引用
{
num += den;//num = num+den;
return *this;
}
const Fraction operator ++(int) // 后置++,返回的是一个值
{
Fraction old (*this); // 创建一个拷贝构造函数的局部对象
++(*this); // 调用前置++
return old; // 返回局部对象
}
6、相等运算符(==)
(friend)bool operator==(const 类名& 对象名,const类名& 另一个对象名);
bool operator==(const Vector& a, const Vector& b)
{
bool yes = true;
if (a.getSize()!= b.getSize())
{
return false;
}
return true;
}
7、拷贝构造函数
类名 (const 类名& 对象名);
Vector(const Vector &vector);//const可以不加,但引用必须要加上。