基于c++的运算符重载(一、复数非友元+友元)
来源:互联网 发布:用java编写冒泡排序 编辑:程序博客网 时间:2024/05/16 09:48
编程小白浅谈基于c++的运算符重载(一、复数非友元+友元):
using namespace std;
class Complex
{
private:
double m_real; //实部
double m_img; //虚部
public:
Complex(double real = 0, double img = 0):m_real(real),m_img(img){} //构造函数(可省略,小白写是为了方便初始化)
Complex operator +(Complex c); //复数 + 重载函数
Complex operator -(Complex c); //复数 - 重载函数
Complex operator *(Complex c); //复数 * 重载函数
Complex operator /(Complex c); //复数 / 重载函数
bool operator ==(Complex c); //复数 ==重载函数
bool operator !=(Complex c); //复数 !=重载函数
void display(); //打印函数
};
void Complex::display() //不解释了
{
if(m_img >= 0)
cout << m_real << "+" << m_img << "i" <<endl;
else
cout << m_real << m_img << "i" <<endl;
}
Complex Complex::operator+(Complex c) //首先是返回值Complex,再是Complex类,operator是运算符重载的格式
//本来“+”是双目运算符,如果用友元函数要传两个参数,但是Complex类中自己有m_real和m_img所以就传一个就够了
{
Complex result;
result.m_real = m_real + c.m_real;
result.m_img = m_img + c.m_img;
return result;
}
Complex Complex::operator-(Complex c)
{
Complex result;
result.m_real = m_real - c.m_real;
result.m_img = m_img - c.m_img;
return result;
}
Complex Complex::operator*(Complex c)
//乘法思路eg:(2+i)*(3+2i)= 2*3(实)+ 2*2i(虚)+ i*3(虚)+ 2i*i(实且为负)
{
Complex result;
result.m_real = m_real * c.m_real - m_img * c.m_img;
result.m_img = m_real * c.m_img + m_img * c.m_real;
return result;
}
Complex Complex::operator/(Complex c)
//除法思路eg:(2+i)/(3+2i)分子分母同乘(3-2i)
// 分子(2+i)*(3-2i)= 2*3(实)- 2*2i(虚)+ i*3(虚)- 2i*i(实且为负)
// 分母(3+2i)*(3-2i)= 3*3(实)- 2i*2i(实且为负)
// 这样分子的虚部和实部分别与分母相除就可以计算复数除法
{
Complex result;
double d = m_real * c.m_real + m_img * c.m_img;
result.m_real = (m_real * c.m_real + m_img * c.m_img) / d;
result.m_img = (- m_real * c.m_img + m_img * c.m_real) / d;
return result;
}
bool Complex::operator == (Complex c) //返回值是bool型,不是true就是false
{
return m_real == c.m_real && m_img == c.m_img;
}
bool Complex::operator != (Complex c)
{
return m_real != c.m_real || m_img != c.m_img;
}
--------------------------------------------------------------------------
using namespace std; //友元不解释
class Complex
{
private:
double m_real;
double m_img;
public:
Complex(double real = 0, double img = 0):m_real(real),m_img(img){}
friend Complex operator +(Complex c1, Complex c2);
friend Complex operator -(Complex c1, Complex c2);
friend Complex operator *(Complex c1, Complex c2);
friend Complex operator /(Complex c1, Complex c2);
friend bool operator ==(Complex c1, Complex c2);
friend bool operator !=(Complex c1, Complex c2);
void display();
};
void Complex::display()
{
if(m_img >= 0)
cout << m_real << "+" << m_img << "i" <<endl;
else
cout << m_real << m_img << "i" <<endl;
}
Complex operator+(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real + c2.m_real;
result.m_img = c1.m_img + c2.m_img;
return result;
}
Complex operator-(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real - c2.m_real;
result.m_img = c1.m_img - c2.m_img;
return result;
}
Complex operator*(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real * c2.m_real - c1.m_img * c2.m_img;
result.m_img = c1.m_real * c2.m_img + c1.m_img * c2.m_real;
return result;
}
Complex operator/(Complex c1, Complex c2)
{
Complex result;
double d = c1.m_real * c2.m_real + c1.m_img * c2.m_img;
result.m_real = (c1.m_real * c2.m_real + c1.m_img * c2.m_img) / d;
result.m_img = (- c1.m_real * c2.m_img + c1.m_img * c2.m_real) / d;
return result;
}
bool operator == (Complex c1, Complex c2)
{
return c1.m_real == c2.m_real && c1.m_img == c2.m_img;
}
bool operator != (Complex c1, Complex c2)
{
return c1.m_real != c2.m_real || c1.m_img != c2.m_img;
}
using namespace std;
class Complex
{
private:
double m_real; //实部
double m_img; //虚部
public:
Complex(double real = 0, double img = 0):m_real(real),m_img(img){} //构造函数(可省略,小白写是为了方便初始化)
Complex operator +(Complex c); //复数 + 重载函数
Complex operator -(Complex c); //复数 - 重载函数
Complex operator *(Complex c); //复数 * 重载函数
Complex operator /(Complex c); //复数 / 重载函数
bool operator ==(Complex c); //复数 ==重载函数
bool operator !=(Complex c); //复数 !=重载函数
void display(); //打印函数
};
void Complex::display() //不解释了
{
if(m_img >= 0)
cout << m_real << "+" << m_img << "i" <<endl;
else
cout << m_real << m_img << "i" <<endl;
}
Complex Complex::operator+(Complex c) //首先是返回值Complex,再是Complex类,operator是运算符重载的格式
//本来“+”是双目运算符,如果用友元函数要传两个参数,但是Complex类中自己有m_real和m_img所以就传一个就够了
{
Complex result;
result.m_real = m_real + c.m_real;
result.m_img = m_img + c.m_img;
return result;
}
Complex Complex::operator-(Complex c)
{
Complex result;
result.m_real = m_real - c.m_real;
result.m_img = m_img - c.m_img;
return result;
}
Complex Complex::operator*(Complex c)
//乘法思路eg:(2+i)*(3+2i)= 2*3(实)+ 2*2i(虚)+ i*3(虚)+ 2i*i(实且为负)
{
Complex result;
result.m_real = m_real * c.m_real - m_img * c.m_img;
result.m_img = m_real * c.m_img + m_img * c.m_real;
return result;
}
Complex Complex::operator/(Complex c)
//除法思路eg:(2+i)/(3+2i)分子分母同乘(3-2i)
// 分子(2+i)*(3-2i)= 2*3(实)- 2*2i(虚)+ i*3(虚)- 2i*i(实且为负)
// 分母(3+2i)*(3-2i)= 3*3(实)- 2i*2i(实且为负)
// 这样分子的虚部和实部分别与分母相除就可以计算复数除法
{
Complex result;
double d = m_real * c.m_real + m_img * c.m_img;
result.m_real = (m_real * c.m_real + m_img * c.m_img) / d;
result.m_img = (- m_real * c.m_img + m_img * c.m_real) / d;
return result;
}
bool Complex::operator == (Complex c) //返回值是bool型,不是true就是false
{
return m_real == c.m_real && m_img == c.m_img;
}
bool Complex::operator != (Complex c)
{
return m_real != c.m_real || m_img != c.m_img;
}
--------------------------------------------------------------------------
using namespace std; //友元不解释
class Complex
{
private:
double m_real;
double m_img;
public:
Complex(double real = 0, double img = 0):m_real(real),m_img(img){}
friend Complex operator +(Complex c1, Complex c2);
friend Complex operator -(Complex c1, Complex c2);
friend Complex operator *(Complex c1, Complex c2);
friend Complex operator /(Complex c1, Complex c2);
friend bool operator ==(Complex c1, Complex c2);
friend bool operator !=(Complex c1, Complex c2);
void display();
};
void Complex::display()
{
if(m_img >= 0)
cout << m_real << "+" << m_img << "i" <<endl;
else
cout << m_real << m_img << "i" <<endl;
}
Complex operator+(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real + c2.m_real;
result.m_img = c1.m_img + c2.m_img;
return result;
}
Complex operator-(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real - c2.m_real;
result.m_img = c1.m_img - c2.m_img;
return result;
}
Complex operator*(Complex c1, Complex c2)
{
Complex result;
result.m_real = c1.m_real * c2.m_real - c1.m_img * c2.m_img;
result.m_img = c1.m_real * c2.m_img + c1.m_img * c2.m_real;
return result;
}
Complex operator/(Complex c1, Complex c2)
{
Complex result;
double d = c1.m_real * c2.m_real + c1.m_img * c2.m_img;
result.m_real = (c1.m_real * c2.m_real + c1.m_img * c2.m_img) / d;
result.m_img = (- c1.m_real * c2.m_img + c1.m_img * c2.m_real) / d;
return result;
}
bool operator == (Complex c1, Complex c2)
{
return c1.m_real == c2.m_real && c1.m_img == c2.m_img;
}
bool operator != (Complex c1, Complex c2)
{
return c1.m_real != c2.m_real || c1.m_img != c2.m_img;
}
阅读全文
0 0
- 基于c++的运算符重载(一、复数非友元+友元)
- 第八周任务一(2) 友元函数的运算符重载 复数
- 第八周项目一 复数类之友元函数的运算符重载
- 项目一--用类的友元函数实现复数类中的运算符重载
- 复数类的运算符重载(友元函数)
- 复数的运算符重载----友元函数
- 第8周项目一-实现复数类中的运算符重载(利用类的友元函数)
- 第八周项目一(2):实现复数类中的运算符重载:类的友元函数
- 第八周-项目一-复数类中的运算符重载(友元函数)
- 第八周 项目一 (2) 实现复数类中的运算符重载 友元函数
- 第八周 项目一-复数类中的运算符重载(2)友元函数实现
- 第二学期第八周项目1--实现复数类中的运算符重载(两个复数的运算友元)
- 实现复数类中运算符的重载(利用友元函数)
- 第十二周项目1实现复数类的运算符重载 (友元函数)
- 4-1 复数类的运算符重载--成员运算符重载、友元运算符重载
- [c++]复数的运算符重载
- 【C++】复数的运算符重载
- 2014-项目一--用友元函数实在复数的运算符重载
- 简析在React Native中如何适配iPhoneX
- Java 8 之 lambda 表达式简单使用入门实例代码
- 1. jQuery ajax开发基于xml(了解) 1.1. XStream介绍
- Kotlin学习笔记--String比较和Map
- 关于XStream相关的常用方法;设置别名;忽略属性;设置xml字段属性
- 基于c++的运算符重载(一、复数非友元+友元)
- Text file busy(文本文件忙)
- 要想使用XStream的注解,必须开启注解扫描.
- 【Android源码系列】Service启动源码解析
- ros kinetic版编译error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
- 、 Ajax跨域问题 1. 跨域介绍 1.1. 什么是跨域; 跨域解决方案;jQuery解决跨域操作
- Educational Codeforces Round 31 C. Bertown Subway dfs
- post请求和get请求的区别(文件上传)
- 个人笔记(随时更新)