实验目的:

1.掌握用成员函数重载运算符的方法

2.掌握用友元函数重载运算符的方法

实验要求

1.定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等。

2.定义运算符重载函数,通过重载运算符:+,-,*,/,直接实现二个复数之间的加减乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“+”,“*”用友元函数实现重载,除法“-”,“/”用成员函数实现重载,参数是复数或实数。

3.通过重载运算符:>>,<<,=,直接实现复数的输入、输出及赋值运算,通过重载运算符:= =,!=直接实现复数的比较运算,编写一个完整的程序,测试重载运算符的正确性。

操作菜单可参考如下格式:

1输入复数

2查看输入的复数

3复数相加

4复数相减

5复数相乘

6复数相除

7输出结果

0退出

#include <iostream>
#include<cstdio>
using namespace std;
class Complex
{
public:
Complex(double r = ,double i = )//构造函数
{
real=r;
imag=i;
}
~Complex()
{ }
friend Complex operator+(Complex &c1,Complex &c2); //重载为友员函数
friend Complex operator*(Complex &c1,Complex &c2);
Complex operator -(Complex&);//重载为成员函数
Complex operator /(Complex&);
friend istream& operator>>(istream&, Complex&);
friend ostream& operator<<(ostream&, Complex&);
friend bool operator==(Complex &c1,Complex &c2);
friend bool operator!=(Complex &c1,Complex &c2);
void display( );
private:
double real;
double imag;
};
Complex operator + (Complex &c1,Complex &c2)
{
return Complex(c1.real+c2.real, c1.imag+c2.imag);
}
Complex operator * (Complex &c1,Complex &c2)
{
return Complex(c1.real*c2.real, c1.imag*c2.imag);
}
Complex Complex::operator-(Complex &c)
{
return Complex(real-c.real,imag-c.imag);
}
Complex Complex::operator/(Complex &c)
{
return Complex(real/c.real,imag/c.imag);
} istream& operator>>( istream& in, Complex &c )
{
in >> c.real >> c.imag;
return in;
}
ostream& operator<<( ostream& out, Complex &c )
{
out << c.real << "+" << c.imag << "i\n";
return out;
} bool operator == (Complex &c1,Complex &c2)
{
if(c1.real==c2.real&&c1.imag==c2.imag)
{
return true;
}
else
{
return false;
}
}
bool operator != (Complex &c1,Complex &c2)
{
if(c1.real!=c2.real||c1.imag!=c2.imag)
{
return true;
}
else
{
return false;
}
}
void Complex::display( )
{
cout<<real<< "+" <<imag<<"i\n"<<endl;
}
int Menu()
{
int t;
cout << endl;
cout<<"=================="<<endl;
cout<<"1.输入复数"<<endl;
cout<<"2.查看输入的复数"<<endl;
cout<<"3.复数相加"<<endl;
cout<<"4.复数相减"<<endl;
cout<<"5.复数相乘"<<endl;
cout<<"6.复数相除"<<endl;
cout<<"7.输出结果"<<endl;
cout<<"0.退出"<<endl;
cout<<"=================="<<endl;
cout<<"请选择(0-7):";
cin>>t;
return t;
} int main()
{
int iChoice =;
Complex c1,c2,c3,c4;
while (iChoice!=)
{
iChoice = Menu();
switch (iChoice)
{
case :
{
cout<<"请输入一个复数:"<<endl;
cin>>c1;
getchar();
break;
}
case :
{
//c1.display();
cout<<c1;
break;
}
case :
{
cout<<"原有的复数:"<<endl;
cout<<c1;
cout<<"请再输入一个复数相加:"<<endl;
cin>>c2;
getchar();
c3=c1+c2;
break;
}
case :
{
cout<<"原有的复数:"<<endl;
cout<<c1;
cout<<"请再输入一个复数相减:"<<endl;
cin>>c2;
getchar();
c3=c1-c2;
break;
}
case :
{
cout<<"原有的复数:"<<endl;
cout<<c1;
cout<<"请再输入一个复数相乘:"<<endl;
cin>>c2;
getchar();
c3=c1*c2;
break; }
case :
{
cout<<"原有的复数:"<<endl;
cout<<c1;
cout<<"请再输入一个复数相除:"<<endl;
cin>>c2;
getchar();
c3=c1/c2;
break;
}
case :
{
cout<<"运算的结果:"<<endl;
cout<<c3;
break;
}
case :
{
break; }
}
} return ;
}

C++ 实验 使用重载运算符实现一个复数类的更多相关文章

  1. c++primer,自定义一个复数类

    #include<iostream> #include<string> #include<vector> #include<algorithm> #in ...

  2. JavaScript实现一个复数类

    <script type="text/javascript"> /** * 这里定义Complex类,用来描述复数 */ /** * 这个构造函数为它所创建的每个实例定 ...

  3. 15.C++-操作符重载、并实现复数类

    首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...

  4. C++重载运算符练习--对people类重载“= =”运算符和“=”运算符

    题目描述 对people类重载“= =”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性是否相等:“=”运算符实现people类对象的赋值操作. 代码如下 #include&l ...

  5. 定义一个复数类Complex

    #include<iostream> #include<math.h> using namespace std; class Complex{ public: Complex( ...

  6. sdut 4-1 复数类的运算符重载

    4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握成员运算符重载及友元运算符重载 要求定义一个复数类.重 ...

  7. 【c++习题】【17/5/8】重载运算符

    1.设计一个Complex(复数)类,完成如下要求: 该类具有实部(Real_Part)和虚部(Image_Part)通过重载运算符“+”实现两个复数的相加通过重载运算符“+”实现一个复数与一个数值的 ...

  8. C++习题 复数类--重载运算符2+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+ ...

  9. C++习题 复数类--重载运算符+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.将运算符函数重载为非成员.非友元的普通函数.编写程序,求两个复数之和. Input ...

随机推荐

  1. aspnet_regiis.exe -i 报 “此操作系统版本不支持此选项”

    解决方法: 控制面板 - 程序和功能 - 启动或关闭windows功能 - Internet Information services - 万维网服务 - 应用程序开发功能 勾选: 1.ASP.NET ...

  2. [BZOJ 3652]大新闻

    [BZOJ 3652] 大新闻 题意 随机从 \([0,n)\) 中选取一个整数 \(x\), 并从 \([0,n)\) 中再选取一个整数 \(y\). 有 \(p\) 的概率选取一个能令 \(x\o ...

  3. SDN 第五次上机作业

    1.搭建如下拓扑并连接控制器 2.下发相关流表和组表实现负载均衡 s1: s2: s3: s4: 3.抓包分析验证负载均衡 s4-eth1: s4-eth2: s4-eth3

  4. Python接口自动化--URL参数的编码和解码 6

    # _*_ coding:utf-8 _*_ #python2 import urllib #有时,需要从上一个请求的url获取参数,传到下一个请求中,中文会显示为编码的形式,这时候就需要进行解码 u ...

  5. MySql详解(五)

    MySql详解(五) MySql库的管理 一.创建库 create database [if not exists] 库名[ character set 字符集名]; 二.修改库 alter data ...

  6. swift和oc的protocol的成员变量

    都需要协议实现者提供具体变量: 否则认为不符合协议. @protocol edddd <NSObject> @property(nonatomic, strong) NSObject *e ...

  7. SAP BPC方案介绍

    refer to http://sapper.blog.sohu.com/166039991.html SAP/BPC简介: 全面预算管理是联系公司战略目标与日常运营的重要纽带,它上到战略层面.下到执 ...

  8. 【转】Android中通知的提示音、震动和LED灯效果小例子

    通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...

  9. oracle11g dataguard 备库数据同步的检查方法

    概述: 一.环境      主库:       ip地址:192.168.122.203       oracle根目录:/data/db/oracle       SID:qyq       数据文 ...

  10. pycharm同步

    只有专业版的才能同步服务器 按照这个来:https://zhuanlan.zhihu.com/p/35067462 3.然后配置映射信息 local path是自己的工程的本地目录路径, Deploy ...