运算符重载函数作为类成员函数和友元函数
2013-09-22 23:17
162 查看
运算符重载函数既可以做为类成员函数也可以重载为友元函数,但使用定义方法和使用上是由较大差别的。
定义Complex为复数类,重载运算符"+"实现复数的相加。
程序1.1
程序运行界面:
我们单独拿出运算符成员函数体来分析:
这是重载"+"的成员函数,实现了两个类中的成员变量的值相加,并赋给第三个变量的功能。
但是,函数只有一个形参,那么另外一个进行加操作的类是谁呢?
实际上语句:c3=c1+c2;被解释为c3=c1.operator+(c2);
也就是说,c1类调用了它的成员函数operator+();c2作为该成员函数的实参。
当两个Complex类执行"+"运算时,“+”左面的类调用成员函数operator+(),并将c2作为函数的实参进行操作。
程序的功能和程序1.1是一样的,不过我们在程序1.2中将运算符重载函数作为友元函数进行操作。
程序1.2
下面我们单独分析这个友元函数:
该函数是类Complex的友元函数,也就是说它不是Complex类的成员函数,Complex类对象不能调用该函数。
c3=c1+c2;被解释为c3=operator + (c1,c2);也是就说相加的两个类对象都作为operator +()的参数。
运算符重载函数作为类成员函数
首先看一个运算符重载函数作为类成员函数的示例代码:定义Complex为复数类,重载运算符"+"实现复数的相加。
程序1.1
#include <iostream.h> 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作为函数的实参进行操作。
运算符重载函数作为友元函数
我们也是先看一段程序代码:程序的功能和程序1.1是一样的,不过我们在程序1.2中将运算符重载函数作为友元函数进行操作。
程序1.2
#include <iostream.h> using namespace std; class Complex { public: Complex() { real=0; imag=0; } Complex(double r,double i) { real=r; imag=i; } friend Complex operator +(Complex &c1,Complex &c2);//声明重载运算符"+"的函数 void display(); private: double real; double imag; }; Complex operator+(Complex &c1,Complex &c2)//定义重载运算符"+"的函数 { Complex c3; c3.real=c1.real+c2.real; c3.imag=c1.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 operator+(Complex &c1,Complex &c2)//定义重载运算符"+"的函数 { Complex c3; c3.real=c1.real+c2.real; c3.imag=c1.imag+c2.imag; return c3; }
该函数是类Complex的友元函数,也就是说它不是Complex类的成员函数,Complex类对象不能调用该函数。
c3=c1+c2;被解释为c3=operator + (c1,c2);也是就说相加的两个类对象都作为operator +()的参数。
相关文章推荐
- 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数与友元函数的区别
- 运算符重载函数作为类成员函数和友元函数
- 10.2 运算符重载函数作为类成员函数和友元函数
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和有友元函数
- C++运算符重载函数作为类成员函数和友元函数
- 运算符重载 成员函数及友元函数
- 编写高质量代码——运算符重载,是成员函数还是友元函数
- 第八周任务一(运算符重载函数作为类成员函数和有员函数及其他)
- C++ 重载运算符 运算符重载函数作为类成员函数 重载运算符+
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- C++运算符重载函数作为类成员函数和友元函数
- 类成员函数作为其他类的友元函数的实现(c++语言)
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
- 全局函数、类成员函数 作为友元函数
- 关于运算符重载 成员函数运算符重载 友元函数运算符重载
- 成员函数和友元函数 完成二元和一元运算符重载(进阶1)