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;
}
运行结果如下图:
评论