运算符重载

python运算符重载案例

被刻印的时光 ゝ 提交于 2020-02-27 08:45:24
'' ' * 自定义一个Ration类(有理数类) * 把有理数的正负判断功能移动到分子,把分数看作数组other [ 0 ] = 分子, [ 1 ] = 分母 * 运算符重载还有 __mod__ ( self ) 求余 . __contians__ ( self, value ) 检查其成员资格 , 在本例中没体现 '' ' def gcd ( a , b ) : #考虑到正负数,需要每次递归都要把a , b取绝对值 a = abs ( a ) b = abs ( b ) if a < b : a , b = b , a if b == 0 : return a else : return gcd ( b , a % b ) class Ration : def __init__ ( self , numberator = 0 , denominator = 1 ) : #分子,分母 divisor = gcd ( numberator , denominator ) self . __numberator = ( 1 if denominator > 0 else - 1 ) * int ( numberator / divisor ) self . __denominator = int ( abs ( denominator ) / divisor ) # + - * /:

C++ 运算符重载(operator overloading)

孤街醉人 提交于 2020-02-24 02:50:43
运算符重载是通过函数实现的,它本质上是函数重载。 运算符重载其实就是定义一个函数,在函数内实现想要的功能,当用到这个运算符时,编译器会自动调用这个函数。 可以将 operator运算符 名称这一部分看作函数名,例如 operator+ 。 来源: https://www.cnblogs.com/xiaobaizzz/p/12355294.html

(七)C++基础之运算符重载(一)

大城市里の小女人 提交于 2020-02-17 15:41:21
一、C++运算符重载之使用规则 1.1、运算符重载的意义 1.2、运算符重载实例 1.3、运算符重载 1.4、运算符重载规则 1.1、运算符重载的意义 所谓重载,就是重新赋予新的含义 ,函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。 所以运算符也可以重载,例如我们经常使用的 << 左移运算符,被重新赋予别的功能。 运算符重载的本质是函数重载。 运算符重载的个格式: 函数类型 operator 运算符名称 ( 形参表列 ) { 重载实体 ; } 1.2、运算符重载实例 我们这边使用 + 进行一个进行复数的加法。 代码如下: # include <iostream> using namespace std ; class Complex { public : Complex ( int real , int imaginary ) { this - > real = real ; this - > imaginary = imaginary ; } void print ( void ) { cout << this - > real << "+" << this - > imaginary << "i" << endl ; } friend Complex operator + ( Complex & c1

复数运算(C++实现)

放肆的年华 提交于 2020-02-15 10:14:36
实验目的 了解运算符重载的实际意义。 掌握运算符重载的规则。 熟悉多种运算符重载的实际应用。 实验内容 题目 :定义复数类Complex,利用运算符重载实现复数的加、减、乘、除四则运算。 要求 : 复数类包括实部( r e a l real r e a l )和虚部( i m a g e image i m a g e )两个数据成员,可以分别读取、设置和输出。 每个运算测试 3 3 3 组数据。 注意程序的健壮性,如除零操作。 原理 : 加法规则, ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a+bi)+(c+di)=(a+c)+(b+d)i ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i 。 减法规则, ( a + b i ) − ( c + d i ) = ( a − c ) + ( b − d ) i (a+bi)-(c+di)=(a-c)+(b-d)i ( a + b i ) − ( c + d i ) = ( a − c ) + ( b − d ) i 。 乘法规则, ( a + b i ) ∗ ( c + d i ) = ( a c − b d ) + ( a d + b c ) i (a+bi)*(c+di)=(ac-bd)+(ad+bc)i ( a

java面试题

三世轮回 提交于 2020-02-12 15:22:15
1.为什么 wait,notify 和 notifyAll 是在 Object 类中定义的而不是在 Thread 类中定义: 1) wait 和 notify 不仅仅是普通方法或同步工具,更重要的是它们是 Java 中两个线程之间的通信机制。 2) 每个对象都可上锁,这是在 Object 类而不是 Thread 类中声明 wait 和 notify 的另一个原因。 3) 在 Java 中为了进入代码的临界区,线程需要锁定并等待锁定 4) Java 是基于 Hoare 的监视器的思想。 2.为什么Java不支持多重继承, 可以考虑以下两点: 1)第一个原因是围绕钻石形继承问题产生的歧义 2)多重继承确实使设计复杂化并在转换、构造函数链接等过程中产生问题。 3.为什么Java不支持运算符重载? 1)简单性和清晰性。 清晰性是Java设计者的目标之一。设计者不是只想复制语言,而是希望拥有一种清晰,真正面向对象的语言。添加运算符重载比没有它肯定会使设计更复杂,并且它可能导致更复杂的编译器, 或减慢 JVM,因为它需要做额外的工作来识别运算符的实际含义,并减少优化的机会, 以保证 Java 中运算符的行为。 2)避免编程错误。 Java 不允许用户定义的运算符重载,因为如果允许程序员进行运算符重载,将为同一运算符赋予多种含义,这将使任何开发人员的学习曲线变得陡峭,事情变得更加混乱。据观察

Cow.h[运算符重载][C++,类]

…衆ロ難τιáo~ 提交于 2020-02-12 11:19:19
#pragma once #include #include using namespace std; class pork; class Goat; class Cow //牛类 { public: Cow(int weight = 0); //使用运算符重载来实现变态加法 //使用operator运算符重载有一个默认参数是对象本身如自己(Cow) pork operator+(const Goat& goat);//一头牛+一只羊=多少斤猪肉 pork operator+(const Cow& cow);//一头牛+一头牛=多少斤猪肉 Cow operator+(int n); string describe();//描述信息 private: int weight=0;//体重 friend pork operator-(const Cow& cow1, const Cow& cow2); friend pork operator-(const Goat& cow1, const Cow& cow2); friend pork operator-(const Cow& cow2, const Goat& cow1); friend Cow operator+(int n, const Cow& cow); }; 来源: CSDN 作者: qq_44699909 链接:

赋值运算符重载以及细节上的问题(operator=)

空扰寡人 提交于 2020-02-11 22:47:19
我们在学习类的时候知道一个完整的类中应该存在大默认函数函数: 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符的重载函数 5.取地址操作符的重载函数 6.const修饰的取地址操作符的重载函数 构造函数,析构函数,拷贝构造函数大家应该不怎么陌生,今天给大家讲解一下我理解的赋值运算符重载函数并且讲一下里面需要注意的易错点(这些易错点都是血与泪的教训) 首先赋值运算符的重载顾名思义就是:“重新定义一下‘=’这个符号”,可能大家要问什么时候需要重载运算符?为什么要重载呢? 用途: 首先我们说运算符的重载是针对类生成的对象而言的,当我们有了对象A新对象B,我们想把对象B赋给对象A时(意思就是让对象A和B完全一样)这时候就需要用到赋值运算符的重载,在我们类中就有默认的赋值运算符重载函数,但是它适用的场景很少,所以大多数情况我们都需要自己实现赋值运算符的重载。 #include<iostream> #include<string.h> class CMystring { public: CMystring(char*pdata=NULL);//构造函数 CMystring(const CMystring&str);//拷贝构造函数 ~CMystring();//析构函数 CMystring&operator =(const CMystring&str)//赋值运算符的重载 { if

C++笔记14

女生的网名这么多〃 提交于 2020-02-11 14:08:40
运算符重载 C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型··· +、-、*、/、%&、~、!、|、=、<<、>>、!=··· 在C++里,我们想进行两个复数的加减运算 想直接写:complex_a+complex_b 是会编译出错的 运算符重载的概念就是对C++里预定义的运算符赋予多重的含义,使之作用于不同类型的数据时导致不同类型的行为 运算符重载的实质就是函数重载 可以重载为普通函数,也可以重载为成员函数 把运算符的表达式转换成对运算符函数的调用 把运算符的操作数转换成运算符函数的参数 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数 运算符重载的形式 exp. 返回值类型 operator 运算符(形参表) { ··· } class Complex { public: double real,imag; Complex(double r=0.0,double i=0.0):real(r),imag(i){} Complex operator-(const Complex & c); }; Complex operator+(const Complex & a,const Complex & b) { return Complex(a.real+b.real,a,imag+b.imag);//返回一个临时对象 } Complex

Cow.cpp[运算符重载][C++,类]

十年热恋 提交于 2020-02-09 18:21:51
#include “Cow.h” #include “pork.h” #include “Goat.h” Cow::Cow(int weight) { this->weight = weight; } pork Cow::operator+(const Goat& goat) { /*加法规则: 一斤牛肉:两斤猪肉 一斤羊肉:三斤猪肉 / int tmp = this->weight 2+goat.getweight()*3; return pork(tmp); } pork Cow::operator+(const Cow& cow) { int tmp = (this->weight + cow.weight) * 2; return pork(tmp);//返回一个猪肉类的对象 } Cow Cow::operator+(int n) { int tmp = weight + n; return Cow(tmp); } string Cow::describe() { stringstream str; str << weight << “斤牛肉”; return str.str(); } 来源: CSDN 作者: qq_44699909 链接: https://blog.csdn.net/qq_44699909/article/details/104219857