几大运算符重载

来源:互联网 发布:js判断数组拼接 编辑:程序博客网 时间:2024/06/05 19:07

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可以不加,但引用必须要加上。

原创粉丝点击