实现完整的类运算
来源:互联网 发布:科比历届季后赛数据 编辑:程序博客网 时间:2024/04/30 02:06
/** 程序的版权和版本声明部分* Copyright (c)2013, 烟台大学计算机学院学生* All rightsreserved.* 文件名称:a.cpp* 作 者:孔云* 完成日期:2014年4月16日* 版 本 号: 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+(Complex &c2,Complex &c3); Complex operator+(double); friend Complex operator+(double,Complex &c2); friend Complex operator-(Complex &c2,Complex &c3); Complex operator-(double); friend Complex operator-(double,Complex &c2); friend Complex operator*(Complex &c2,Complex &c3); friend Complex operator*(double,Complex &c3); Complex operator*(double); friend Complex operator/(Complex &c2,Complex &c3); friend Complex operator/(double,Complex &c3); Complex operator/(double); double friend add(Complex &); double friend reduce(Complex &); double friend multiply(Complex &); double friend divide(Complex &); void display1(); void display2();private: double real; double imag;};//下面定义成员函数void Complex::display1(){ cout<<"("<<real<<","<<imag<<"i)"<<endl;}void Complex::display2(){ Complex b(2.45,2.36); cout<<"两个实数和:"<<add(b)<<endl; cout<<"两个实数差:"<<reduce(b)<<endl; cout<<"两个实数积:"<<multiply(b)<<endl; cout<<"两个实数商:"<<divide(b)<<endl;}Complex operator+(Complex &c2,Complex &c3){ return Complex(c2.real+c3.real,c2.imag+c3.imag);}Complex operator-(Complex &c2,Complex &c3){ return Complex(c2.real-c3.real,c2.imag-c3.imag);}Complex operator*(Complex &c2,Complex &c3){ return Complex(c3.real*c2.real-c3.imag*c2.imag,c3.imag*c2.real+c3.real*c2.imag);}Complex operator/(Complex &c2,Complex &c3){ int k=c3.real*c3.real+c3.imag*c3.imag; return Complex((c2.real*c3.real-c2.imag*c3.imag)/k,(c2.imag*c3.real+c2.real*c3.imag)/k);}Complex Complex::operator+(double p1){ Complex a; a.real=real+p1; a.imag=imag; return a;}Complex operator+(double p2,Complex &c2){ return Complex(c2.real+p2,c2.imag);}Complex Complex::operator-(double p3){ Complex b; b.real=real-p3; b.imag=imag; return b;}Complex operator-(double p4,Complex &c2){ return Complex(p4-c2.real,-c2.imag);}Complex Complex::operator*(double h1){ Complex c; c.real=real*h1; c.imag=imag*h1; return c;}Complex operator*(double h2,Complex &c2){ return Complex(h2*c2.real,h2*c2.imag);}Complex operator/(double h3,Complex &c3){ int g=c3.real*c3.real+c3.imag*c3.imag; return Complex(h3*c3.real/g,-h3*c3.imag/g);}Complex Complex::operator/(double h4){ Complex d; d.real=real/h4; d.imag=imag/h4; return d;}double add(Complex &c2){ return(c2.real+c2.imag);}double reduce(Complex &c2){ return(c2.real-c2.imag);}double multiply(Complex &c2){ return(c2.real*c2.imag);}double divide(Complex &c2){ return(c2.real/c2.imag);}//下面定义用于测试的main()函数int main(){ Complex c1(3,4),c2(5,-10),c3,c4(2.56,0); cout<<"c1="; c1.display1(); cout<<"c2="; c2.display1(); c3=c1+c2; cout<<"c1+c2="; c3.display1(); c3=c1-c2; cout<<"c1-c2="; c3.display1(); c3=c1*c2; cout<<"c1*c2="; c3.display1(); c3=c1/c2; cout<<"c1/c2="; c3.display1(); c3=c1+c4; cout<<"c1+c4="; c3.display1(); c3=c4+c2; cout<<"c4+c2="; c3.display1(); c3=c1-c4; cout<<"c1-c4="; c3.display1(); c3=c4-c2; cout<<"c4-c2="; c3.display1(); c3=c1*c4; cout<<"c1×c4="; c3.display1(); c3=c4*c2; cout<<"c4×c2="; c3.display1(); c3=c1/c4; cout<<"c1÷c4="; c3.display1(); c3=c4/c2; cout<<"c4÷c1="; c3.display1(); c3.display2(); return 0;}
心得体会:在此程序中,在实现复数加实数的函数中,默认第一个参数为类对象,仅含有一个实数参数。然而,尽管形参的顺序任意,不要求第一个参数为类对象,但值得注意的是:在运用运算符的表达式中,要求运算符左侧的操作数与函数第一个对应,运算符右侧的操作数与函数的第二个参数对应。这在实现实数加复数的函数中体现到。
0 0
- 实现完整的类运算
- 第八周-运算符重载--实现复数类中的运算符重载-完整的类
- 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能
- 【项目1】实现复数类中的运算符重载---(3)一个定义完整的类
- 第八周 项目一 (3) 实现复数类中的运算符重载 完整的类
- 第8周项目1-实现复数类中的运算符重载(完整的类)
- 第八周项目1-3:实现复数类中的运算符重载-完整的复数类
- 第八周项目一--定义完整的类,实现复数中的运算符重载
- 实现复数类中的运算符重载 完整类
- String 类的完整实现
- 第八周项目一(3):实现复数类中的运算符重载:定义完整的类
- 15第八周项目一——实现复数类中的运算符的重载(完整类)
- c++ string类的完整实现!!!
- 复数类的完整实现(C++版)
- Trackback的完整实现
- 基数排序的完整实现
- 二叉排序树的完整实现
- 用string实现的一个完整的类,包含以下操作:重载运算符 > >,< < ,string模板类,fstream对二进制数据读写
- 一种kernel panic问题的解决方法
- Windows/Linux下MySql 不区分大小写设置问题
- 第六周作业1——利用哈夫曼编码英文字母表
- android radiobutton 问题
- Windows 串口编程例子
- 实现完整的类运算
- Introduction to C++ for iOS Developers: Part 1
- DragonBook 第二版 编译原理 机械工业出版社 课后答案
- 无工具的情况下测试APP性能
- 微软2014实习生及秋令营之String reorder问题
- 《Android系统学习》第六章:Android4.1 HAL段错误问题—linker与prelink
- ActiveMQ学习教程(一)——安装与示例
- TI笔试之单片机测电阻
- android fragment onstart onresume onpause 执行时机笔记