C++ Complex + - += -+ <<运算符重载

/*

提供了加减运算符重载的复数类头文件。关于传递引用和传递值,使用const 和不使用const,关于指针成员的使用需要继续学习。。。
同理可以写出乘除法,共轭复数,绝对值, 等其他运算符重载。

*/

#ifndef _COMPLEX_H_
#define _COMPLEX_H_
#include<iostream>
using namespace std;
class Complex
{
public:
//构造函数
Complex(double r = 0, double i = 0):re(r), im(i) {} //在函数体内是赋值assignment re=r im=i
//拷贝构造函数
Complex(const Complex &temp);

//返回实部
double real()const{return re;}

//返回虚部
double imag()const{return im;}

//重载各种运算符
Complex &operator+=(const Complex &);
// ostream &operator<<(ostream &); temp<<cout 形式 为顺应使用习惯 必须写成非成员函数。
Complex &operator = (const Complex &);
Complex &operator-=(const Complex &);

private:
double re;
double im;
//friend Complex &_doapl(Complex *, const Complex &r);
};

//拷贝构造函数
inline Complex::Complex(const Complex &temp):re(temp.real()),im(temp.imag())
{

}

//重载= 就是赋值
inline Complex &Complex::operator = (const Complex &temp)
{
re = temp.real();
im = temp.imag();
return *this;
}

//重载+=
inline Complex &Complex::operator += (const Complex &temp)
{
this->re = this->re + temp.real();
this->im = this->im + temp.imag();
return *this;
}

//重载-=
inline Complex &Complex::operator -= (const Complex &temp)
{
this->re = this->re - temp.real();
this->im = this->im - temp.imag();
return *this;
}

//重载<<
inline ostream &operator << (ostream &os, const Complex &temp)
{
if (temp.imag() == 0)
{
if (temp.real())
{
return os << temp.real();
}
return os << 0;
}
else if (temp.imag() > 0)
{
if (temp.real())
{
return os << temp.real() << "+" << temp.imag() << "i";
}
return os << temp.imag() << "i";
}
else
{
if (temp.real())
{
return os << temp.real() << temp.imag() << "i";
}
return os << temp.imag() << "i";
}
}

//重载 Complex+double
inline Complex operator +(const Complex &x, double &y)
{
return Complex(x.real() + y, x.imag());
}

//重载 Complex+Complex
inline Complex operator +(const Complex &x, const Complex &y)
{
return Complex(x.real() + y.real(), x.imag() + y.imag());
}

//重载 double+Complex
inline Complex operator +(double &y, const Complex &x)
{
return Complex(x.real() + y, x.imag());
}

//重载+Complex
inline Complex operator +(const Complex &x)
{
return x;
}

//重载 Complex-double
inline Complex operator -(const Complex &x, double &y)
{
return Complex(x.real() - y, x.imag());
}

//重载 Complex-Complex
inline Complex operator -(const Complex &x, const Complex &y)
{
return Complex(x.real() - y.real(), x.imag() - y.imag());
}

//重载 double-Complex
inline Complex operator -(double &y, const Complex &x)
{
return Complex(y-x.real(), -x.imag());
}

//重载-Complex
inline Complex operator -(const Complex &x)
{
return Complex(-x.real(), -x.imag());
}

#endif // !_COMPLEX_H_

//如果有错误,或者低能的地方,欢迎指出,感激不尽!!!!!1

原文地址:https://www.cnblogs.com/yangshengjing/p/11625942.html

时间: 2024-10-13 07:05:32

C++ Complex + - += -+ <<运算符重载的相关文章

运算符重载的宏观思考The Complex Class

运算符重载是C++中较C语言更加先进和灵活的地方之一,通过运算符重载,使运算符拥有了除了只能完成内置类型的运算操作之外的对于其他自定义类型的运算功能.这使得C++更加灵活,通俗,更加面向对象. 事实上运算符的重载不过是对函数名为"operator 运算符"的函数的定义,根据所操作的对象的不同,可以分为成员函数和友元函数两种定义方法. C++中唯一的三目运算符不能重载,因此所有的运算符重载的形参都不会超过三个,又由于成员函数默认第一个形参必须是自定义类的对象并且默认绑定到*this指针,

C++:运算符重载函数之成员运算符重载函数

5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式如下: 函数类型 operator 运算符(形参表) {       函数体 } (2)成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义. 在类的内部,声明成员运算符重载函数原型的格式如下: class X{      ...      函数类型 operator运算符(参数表); };

C++复数运算符重载(+与&lt;&lt;)

Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算与输出操作.(1)参加运算的两个运算量可以都是类对象,也可以其中有一个是实数,顺序任意.例如,c1+c2,d+c1,c1+d均合法(设d为实数,c1,c2为复数).(2)输出的算数,在复数两端加上括号,实部和虚部均保留两位小数,如(8.23+2.00i).(7.45-3.40i).(-3.25+4.13i)等.编写程序,分别求两个复数之和.整数和复数之和,并且输出. 请在下面的程序段基础上完

scala学习手记7 - 运算符重载

从语法上来说scala是没有运算符的.之前的一节里也曾提到过scala的运算符实际上是方法名,如1 + 2实际上就是1.+(2).我们可以将之视为运算符,是因为scala的一个特性:如果方法的参数小于等于1个的话,那么"."和括号就都是可选的. scala的运算符重载指的就是重载+.-这样的符号--和C.java或者python等语言不一样,我们需要自己定义这些符号如何实现. 下面看一个"+"运算符实现的例子.这里定义了一个Complex类,Complex指的是复数

C++:运算符重载函数之友元运算符重载

5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算符重载函数的语法如下: 在类的内部: friend 函数类型 operator运算符(形参表) { 函数体 } 在类的内部声明,在类外定义: class X{ ... friend 函数类型 operator运算符(形参表): }; 函数类型 X::operator运算符(形参表) { 函数体 }

2013级别C++文章9周(春天的)工程——运算符重载(两)

课程主页中:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生信息管理系统",找出当中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,细致体会其使用方法.在以后的设计中可以灵活应用有关方法和技巧 项目1-3直接复制第8周的代码,增加要求的运算符重载定义后,作为第9周的任务另外发博文. [项目1]在第8周项目1基础上(1)再定义一目运算符 -,

[转]C++之运算符重载(2)

上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又是完全不同的(q前置运算符:先加1,再赋值:后置运算符:先赋值,再加1).那么要怎么重载它们,才可以有效的区分开来呢?今天我就来说说C++中是怎么处理前置运算符和后置运算符的重载的.以及介绍一下插入运算符(>>)和提取运算符(<<)的重载. 1.在C++里编译器是根据运算符重载函数参数

【C++】复数的运算符重载

运算符重载的定义: 用户对于自定义类型的运算操作,例如复数的运算.需要重新定义运算符号(创建函数). 除了类属关系运算符".".成员指针运算符".*".作用域运算符"::".sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载. 复数的运算符重载如下: <span style="font-size:18px;"> #include<iostream> #incl

c++之运算符重载

所谓运算符重载,可以简单理解为函数的重载,而[email protected]就是函数名,@表示任何运算符,加减乘除等. #include <iostream> using namespace std; class Complex{ public: Complex(){real = 0; imag = 0;}; Complex(double r, double i){real = r; imag = i;}; Complex operator+ (Complex & c2); void