定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的“基础工程”)。这样的类在(2)的基础上,扩展+、-、*、/运算符的功能,使之能与double型数据进行运算。设Complex c; double d; c+d和d+c的结果为“将d视为实部为d的复数同c相加”,其他-、*、/运算符类似。
问题及代码
/* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2015 年 4 月 26 日 * 版 本 号:v1.0 */ #include<iostream> using namespace std; class Complex { public: Complex() { real=0; imag=0; } Complex(double r,double i) { real=r; imag=i; } friend Complex operator+(const Complex &c1,const Complex &c2); friend Complex operator+(const double a,const Complex &c2); friend Complex operator+(const Complex &c1,const double a); friend Complex operator-(const Complex &c1,const Complex &c2); friend Complex operator-(const double a,const Complex &c2); friend Complex operator-(const Complex &c1,const double a); friend Complex operator*(const Complex &c1,const Complex &c2); friend Complex operator*(const double a,const Complex &c2); friend Complex operator*(const Complex &c1,const double a); friend Complex operator/(const Complex &c1,const Complex &c2); friend Complex operator/(const double a,const Complex &c2); friend Complex operator/(const Complex &c1,const double a); void display(); private: double real; double imag; }; //下面定义成员函数 Complex operator+(const Complex &c1,const Complex &c2) { return Complex(c1.real+c2.real,c1.imag+c2.imag); } Complex operator+(const double a,const Complex &c2) { return Complex(a+c2.real,c2.imag); } Complex operator+(const Complex &c1,const double a) { return Complex(a+c1.real,c1.imag); } Complex operator-(const Complex &c1,const Complex &c2) { return Complex(c1.real-c2.real,c1.imag+c2.imag); } Complex operator-(const double a,const Complex &c2) { return Complex(a-c2.real,c2.imag); } Complex operator-(const Complex &c1,const double a) { return Complex(c1.real-a,c1.imag); } Complex operator*(const Complex &c1,const Complex &c2) { return Complex(c1.real*c2.real-c1.imag*c2.imag,c1.imag*c2.real+c1.real*c2.imag); } Complex operator*(const double a,const Complex &c2) { return Complex(a*c2.real,a*c2.imag); } Complex operator*(const Complex &c1,const double a) { return Complex(c1.real*a,c1.imag*a); } Complex operator/(const Complex &c1,const Complex &c2) { return Complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag)); } Complex operator/(const double a,const Complex &c2) { return Complex((a*c2.real)/(c2.real*c2.real+c2.imag*c2.imag),(-a*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag)); } Complex operator/(const Complex &c1,const double a) { return Complex((c1.real*a)/(a*a),(c1.imag*a)/(a*a)); } void Complex::display() { if(imag>0) cout<<real<<"+"<<imag<<"i"<<endl; else cout<<real<<imag<<"i"<<endl; } //下面定义用于测试的main()函数 int main() { Complex c1(3,4),c2(5,-10),c3; double a=1; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<"b=1"<<endl; c3=c1+c2; cout<<"c1+c2="; c3.display(); c3=c1+a; cout<<"c1+a="; c3.display(); c3=a+c2; cout<<"a+c2="; c3.display(); c3=c1-c2; cout<<"c1-c2="; c3.display(); c3=a-c1; cout<<"a-c1="; c3.display(); c3=c1*c2; cout<<"c1*c2="; c3.display(); c3=a*c1; cout<<"a*c1="; c3.display(); c3=c1/c2; cout<<"c1/c2="; c3.display(); c3=c1/a; cout<<"c1/a="; c3.display(); return 0; }
原文地址:http://blog.csdn.net/blue_skyrim/article/details/45289385