首页 > 编程语言 >C++PrimerPlus第十一章类的使用 :练习7 复数类的实现和重载运算符对复数做运算----本章完结

C++PrimerPlus第十一章类的使用 :练习7 复数类的实现和重载运算符对复数做运算----本章完结

时间:2024-06-05 16:59:48浏览次数:9  
标签:---- return temp double bi 运算符 Complex 复数 operator

  1. 复数有两个部分组成:实数部分和虚数部分。复数的一种书写方式是:(3.0,4.0),
    其中,3.0是实数部分,4.0是虚数部分。假设a=(A,Bi),c=(C,Di),则下面是一些复数运算。

加法:a+c=(A+C,(B+D)i)。

减法:a-c=(A-C,(B-D)i)。

乘法:ac=(AC-BD,(AD+B*C)i)。

乘法::xc=(xC,x*Di),其中x为实数。

共轭:~a=(A,-Bi)。

请定义一个复数类,以便下面的程序可以使用它来获得正确的结果。

#ifndef PE11_7_H_
#define PE11_7_H_

#include<iostream>

class Complex
{
private:
	struct Complex_t
	{
		double a;
		double bi;
	};
	double a;
	double bi;
	Complex_t comlex;
	void SetComplex(void);
	void SetABi(void);
public:
	Complex(double a = 0, double bi = 0);

	friend std::ostream& operator<<(std::ostream& os, const Complex& a);
	friend std::istream& operator>>(std::istream& is, Complex& a);
	Complex operator+(Complex& a);
	Complex operator-(Complex& a);
	Complex operator*(Complex& a);
	friend Complex operator~(Complex& a);
	friend Complex operator*(double n,Complex& a);
	
};
#endif // !1
#include"pe11_7.h"
#include<iostream>
using namespace std;
Complex::Complex(double a, double bi)
{
	this->a = a;
	this->bi = bi;
	SetComplex();
}
void Complex::SetComplex(void)
{
	this->comlex.a = this->a;
	this->comlex.bi = this->bi;
}
void Complex::SetABi()
{
	this->a = this->comlex.a;
	this->bi = this->comlex.bi;
}

ostream& operator<<(ostream& os, const Complex& a)
 {
	 os << "(" << a.a << "," << a.bi << "i)";
	 return os;
 }

istream& operator>>(istream& is, Complex& a)
 {
	 cout << "real: ";
	 is >> a.a;
	 if (!is)
	 {
		 is.ignore(numeric_limits<streamsize>::max(), '\n');
		 return (is);
	 }
	 cout << "imaginary: ";
	 is >> a.bi;
	 if (!is)
	 {
		 is.ignore(numeric_limits<streamsize>::max(), '\n');
	 }
	 return (is);
}
Complex Complex::operator+(Complex& a)
{
	Complex temp;
	temp.a = this->a + a.a;
	temp.bi = this->bi + a.bi;
	return temp;
}
Complex Complex::operator-(Complex& a)
{
	Complex temp;
	temp.a = this->a - a.a;
	temp.bi = this->bi - a.bi;
	return temp;
}
Complex Complex::operator*(Complex& a)
{
	Complex temp;
	temp.a = this->a * a.a - this->bi * a.bi;
	temp.bi = this->a * a.bi + this->bi * a.a;
	return temp;
}
Complex operator*(double n, Complex& a)
{
	Complex temp;
	temp.a = n*a.a;
	temp.bi = n*a.bi;
	return temp;
}

 Complex operator~(Complex& a)
{
	 Complex temp;
	 temp.a = a.a;
	 temp.bi = -a.bi;
	
	 return temp;
}
#pragma region 练习7.cpp
/*

*/
#if 1
#include <iostream>
#include"pe11_7.h"
int main()
{
	using namespace std;
	Complex a(3.0, 4.0);  //to avid confusion with complex.h
	Complex c ;

	cout << "Enter a complex number(q to quit):\n";
	while (cin>>c)
	{
		cout << "C is " << c << "\n";
		cout << "complex conjugate is " << ~c << "\n";
		cout << "a is " << a << "\n";
		cout << "a + c is " << a + c << "\n";
		cout << "a - c is " << a - c << "\n";
		cout << "a*c is " << a * c << "\n";
		cout << "2*c is " << 2 * c << '\n';
		cout << "Enter a complex number(q to quit):\n";
	}
	cout << "Done!\n";
	return 0;
}
#endif 
#pragma endregion

测试符合题目要求
在这里插入图片描述

标签:----,return,temp,double,bi,运算符,Complex,复数,operator
From: https://blog.csdn.net/zhyjhacker/article/details/139412695

相关文章

  • C++PrimerPlus第十一章类的使用 :练习6 关系运算符的重载
    6.重新编写Stonewt类(程序清单11.16和程序清单11.17),重载全部6个关系运算符。运算符对pounds成员进行比较,并返回一个bool值。   编写一个程序,它声明一个包含6个Stonewt对象的数组,并在数组声明中初始化前3个对象。然后使用循环来读取用于设置剩余3个数   组元素的......
  • C++PrimerPlus第十一章类的使用 :重写练习七,解决重复造轮子的问题
    在第十一章练习七中,为解决重复造轮子的问题。我们先看一下代码的实现#include"pe11_7.h"#include<iostream>usingnamespacestd;Complex::Complex(doublea,doublebi){ this->a=a; this->bi=bi; SetComplex();}voidComplex::SetComplex(void){ this->co......
  • 如何让委外加工管理更轻松?
    中小制造企业,受制于场地、资金、环保、质量、交期等等因素影响,在生产制造过程中,多数会将一些生产工序或者在制品外发给其他制造工厂进行委外加工生产。随着各地监管部门对环境、能耗管控力度的加大,这种情况在机加工行业尤为突出。委外加工影响到企业订单的按期交付、生产计......
  • C++Primer Plus第十二章程序清单12.1~12.3一个失败的例子分析
    12.1.2特殊成员函数StringBad类的问题是由特殊成员函数引起的。这些成员函数是自动定义的,就StringBad而言,这些函数的行为与类设计不符。具体地说,C++自动提供了下面这些成员函数:1,默认构造函数,如果没有定义构造函数;2,默认析构函数,如果没有定义;3,复制构造函数,如果没有......
  • SQL-子查询
    子查询不相关子查询【1】什么是子查询?一条SQL语句含有多个select, --引入子查询:--查询所有比“CLARK”工资高的员工的信息 --步骤1:“CLARK”工资select salfrom empwhere ename='CLARK'  --2450--步骤2:查询所有工资比2450高的员工的信息 select *fr......
  • Ant Design Vue 动态表头并填充数据
    AntDesignVue动态表头并填充数据AntDesignVue是基于AntDesign的Vue版本,它为Vue.js提供了一套高质量的UI组件库。在本文中,我们将介绍如何使用AntDesignVue创建一个动态表头并填充数据。首先,确保你已经安装了AntDesignVue。如果还没有安装,可以通过以下命......
  • zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
    转载请注明出处:服务器中断,重启服务器在重启kafka服务时,遇到如下报错:2024-06-0513:52:56,251[myid:]-ERROR[main:ZooKeeperServerMain@64]-Unexpectedexception,exitingabnormallyjava.io.EOFExceptionatjava.io.DataInputStream.readInt(DataInputStream.j......
  • js 中 (function($){...})(jQuery) 含义
    原文链接:https://www.cnblogs.com/Jeely/p/10715089.htmljs中(function($){...})(jQuery)含义js中定义函数常用写法是functionname(arg){//arg则是匿名函数的参数。//...}调用函数时的写法是:name(arg);======================================================......
  • python执行模式
    Python执行模式目录Python执行模式命令行模式交互模式好处:坏处:命令行模式命令行模式:写好命令之后,保存并运行整个文件。运行的时候,python解释器会一行一行对文件进行解析和执行。交互模式交互模式:输入一行后,python立即执行,并展示运行结果。好处:不需要创建任何新文件,py......
  • 数据安全之一 加解密介绍
    一、场景 信息系统不断发展,要求对于其中的数据安全性必须增加保护机制,否则数据泄露将会给企业带来不可估量的损失。基于此,数据的安全包括如下:1)数据存储的安全   存储包括:文件存储(包括含有敏感信息的图片)、数据库中的敏感数据的存储(比如:密码)、配置文件中的敏感数据的存储......