运算符重载函数作为类成员函数和友元函数
来源:互联网 发布:阿里云 节点 编辑:程序博客网 时间:2024/06/11 18:40
运算符重载函数既可以做为类成员函数也可以重载为友元函数,但使用定义方法和使用上是由较大差别的。
运算符重载函数作为类成员函数
首先看一个运算符重载函数作为类成员函数的示例代码:
定义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 +()的参数。
- 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- C++运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- C++运算符重载函数作为类成员函数和友元函数
- 10.2 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数与友元函数的区别
- 重载运算符之友元函数和成员函数
- C++ 友元函数和非成员运算符重载
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- C++实现输入输出运算符重载、友元函数和成员函数实现复数类Complex
- 运算符重载函数作为类成员函数和有友元函数
- C++ 重载运算符 运算符重载函数作为类成员函数 重载运算符+
- C++运算符重载 成员函数与友元函数
- 伙伴算法
- 动态规划--子序列的个数
- 在JDK和Eclipse下Java Applet的编写和运行方式
- C语言static关键字的若干问题
- 修正IE下document.getElementsByName无法获取DIV标签
- 运算符重载函数作为类成员函数和友元函数
- VBox 问题: Failed to load VMMR0.r0 (VERR_SUPLIB_WORLD_WRITABLE).
- HDOJ4749 Parade Show
- openmp 中部分函数简介
- adplus 抓取dmp文件
- C/C++学习笔记(七)类的更全面了解
- Eclipse学习之道:Eclipse反编译工具JAD.exe使用
- html编程的细枝末节
- 杭州seo优化常用的工作手法