C++运算符重载函数作为类成员函数和友元函数

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
运算符重载函数既可以做为类成员函数也可以重载为友元函数,但使用定义方法和使用上是由较大差别的。

运算符重载函数作为类成员函数

首先看一个运算符重载函数作为类成员函数的示例代码:

定义Complex为复数类,重载运算符”+”实现复数的相加。

程序1.1

#include
using namespace std;
class Complex
{
 public:
  Complex()
  {
   real=0;
   imag=0;
  }
  Complex(double r,double i)
  {
   real=r;
   imag=i;
  }
  Complex operator +(Complex &c2);//声明重载运算符”+”的函数
  void display();
 private:
  double real;
  double imag;
};
Complex Complex::operator+(Complex &c2)//定义重载运算符”+”的函数
{
 Complex c3;
 c3.real=real+c2.real;
 c3.imag=imag+c2.imag;
 return c3;
}
void Complex::display()
{
 cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
 Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c1=";
 c1.display();
 cout<<"c2=";
 c2.display();
 cout<<"c1+c2=";
 c3.display();
 return 0;
}

程序运行界面:

我们单独拿出运算符成员函数体来分析:

Complex Complex::operator+(Complex &c2)//定义重载运算符”+”的函数
{
 Complex c3;
 c3.real=real+c2.real;
 c3.imag=imag+c2.imag;
 return c3;
}

这是重载”+”的成员函数,实现了两个类中的成员变量的值相加,并赋给第三个变量的功能。

 

但是,函数只有一个形参,那么另外一个进行加操作的类是谁呢?

实际上语句:c3=c1+c2;被解释为c3=c1.operator+(c2);

也就是说,c1类调用了它的成员函数operator+();c2作为该成员函数的实参。

当两个Complex类执行”+”运算时,“+”左面的类调用成员函数operator+(),并将c2作为函数的实参进行操作

相关阅读:

C++中的函数多态性应用&虚函数的灵活应用  http://www.linuxidc.com/Linux/2012-05/59796.htm

C++ 虚函数与纯虚函数 http://www.linuxidc.com/Linux/2013-04/83406.htm

C++中虚函数工作原理和(虚)继承类的内存占用大小计算 http://www.linuxidc.com/Linux/2012-10/72975.htm

C++继承:同名隐藏、覆盖,虚函数 http://www.linuxidc.com/Linux/2012-06/62557.htm

C++中的函数多态性应用&虚函数的灵活应用 http://www.linuxidc.com/Linux/2012-05/59796.htm

C++中基类的构造函数调用虚函数的问题及ATL_NO_VTBL宏 http://www.linuxidc.com/Linux/2010-12/30485.htm

 
<p

未经允许不得转载:演道网 » C++运算符重载函数作为类成员函数和友元函数

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册