C++的多态性的一个重要体现是运算符重载。下面我以复数运算为例说明友元重载运算符。 首先在VC上建一个简单的win32控制台程序。程序源码如下: class ComplexNum{public: ComplexNum(); // 构造函数 ComplexNum(float Vreal,float Vimage); // 重载构造函数 friend ComplexNum operator + (ComplexNum p1,ComplexNum p2); //重载+运算符 friend ComplexNum operator - (ComplexNum p1,ComplexNum p2); //重载-运算符 friend ComplexNum operator * (ComplexNum p1,ComplexNum p2); //重载*运算符 friend ComplexNum operator / (ComplexNum p1,ComplexNum p2); //重载/运算符 void PrintComplexNum(); // 打印复数private: float real; // 复数的实部 float image; //复数的虚部}; #include "stdafx.h"#include "ComplexNum.h"#include <iostream.h> ComplexNum::ComplexNum() { real=0.0f; image=0.0f; } ComplexNum::ComplexNum(float Vreal,float Vimage) { real=Vreal; image=Vimage; }ComplexNum operator + (ComplexNum p1,ComplexNum p2){ ComplexNum p; p.real=p1.real+p2.real; p.image=p1.image+p2.image; return p;} ComplexNum operator - (ComplexNum p1,ComplexNum p2){ ComplexNum p; p.real=p1.real-p2.real; p.image=p1.image-p2.image; return p;} ComplexNum operator * (ComplexNum p1,ComplexNum p2){ ComplexNum p; p.real = (p1.real) * (p2.real) - (p1.image) * (p2.image); p.image = (p1.real) * (p2.image) + (p1.image) * (p2.real); return p;} ComplexNum operator / (ComplexNum p1,ComplexNum p2){ ComplexNum p; p2.image=-(p2.image); p = p1 * p2; float temp = (p2.image) * (p2.image) + (p2.real) * (p2.real); p.real = p.real/temp; p.image = p.image/temp; return p;} void ComplexNum::PrintComplexNum(){ cout<<real<<"+"<<image<<"i\n";} int main(int argc, char* argv[]){ ComplexNum c1(2.3f,4.6f); ComplexNum c2(3.6f,2.8f); ComplexNum c3; c1.PrintComplexNum(); c2.PrintComplexNum(); c3 = c1 + c2; c3.PrintComplexNum(); c3=c1 * c2; c3.PrintComplexNum(); c3=c1-c2; c3.PrintComplexNum(); c3=c1/c2; c3.PrintComplexNum(); return 0;} 运行结果如下图:

评论