运算符重载

C#-运算符重载

我的未来我决定 提交于 2020-01-07 17:57:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 通过运算符重载,可以对我们设计的类使用标准的运算符,例如+、-等。这称为重载,因为在使用特定的参数类型时,我们为这些运算符提供了自己的实现代码,其方式与重载方法相同,也是为同名方法提供不同的参数。运算重载符定义>,同样需要定义<;同样定义运算符==,!=也需要定义,同时最好重写GetHashCode()方法和Equals(Object o)方法。 class Time { private int hour; private int min; public Time(int hour, int min) { this.hour = hour; this.min = min; } public void Add(Time t) { this.hour = this.hour + t.hour + (t.min + this.min) / 60; this.min = (this.min + min) % 60; } public override string ToString() { return string.Format("{0,2}:{1,2}", hour, min); } public override bool Equals(object obj) { return this == (Time)obj

C++ 运算符重载--看传智播客视频的学习笔记

假如想象 提交于 2020-01-04 03:21:04
运算符重载使得用户自定义的数据以一种更简洁的方式工作。 让自定义数据类型有机会进行运算符操作 ----------运算符重载机制 运算符重载本质是一种函数,还是调用函数 运算符重载的规则 (1)不能发明新的运算符 (2)不能改变运算符的操作对象个数 (3)运算符重载后 其优先性和结合性不会变 (4)不能重载的运算符 作用域解析运算符 :: 条件运算符 ?: 直接成员访问运算符 . 类成员指针引用的运算符 .* 还有一个 sizeof (5)除了流运算符是由友元函数重载,其他的运算法最好在类的成员函数中使用 运算符重载的格式 函数返回类型 operator 运算符 (参数表); 实现运算符重载的两种方法 (1)类的成员函数 (2)友元函数 注意: 成员函数有this指针,友元函数没有this指针 成员函数运算符重载 class Test { public: Test(){} Test(int a, int b) { this->a = a; this->b = b; } void GET() { cout<<"=============="<<endl; cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"=============="<<endl; } //实现二元运算符重载 //成员函数重载时,函数的参数列表只需要一个形参即可

17~C++ new和delete运算符重载

戏子无情 提交于 2020-01-03 14:02:26
重载 class A的new/delete 以及 new[]/delete[]运算符: 成功返回非空指针,失败返回空指针 #include < iostream > #include < cstdlib > using namespace std ; class A { public : A ( int var = 0 ) : m_var ( var ) { cout << "A构造:" << this << endl ; } ~ A ( void ) { cout << "A析构:" << this << endl ; } static void * operator new ( size_t size ) { void * pv = malloc ( size ) ; cout << "new:" << size << ' ' << pv << endl ; return pv ; } static void operator delete ( void * pv ) { cout << "delete:" << pv << endl ; free ( pv ) ; } static void * operator new [ ] ( size_t size ) { void * pv = malloc ( size ) ; cout << "new[]:" << size <

public/private/protected 的区别

懵懂的女人 提交于 2019-12-29 20:35:46
具体区别: 在说明这四个关键字之前,就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。 1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用 2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。 3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。 派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。 我们可以根据访问权限总结出不同的访问类型,如下所示: 一个派生类继承了所有基类的方法,但下列情况除外: *基类的构造函数、析构函数和拷贝构造函数(可能是为了多继承定义不出现冲突) *除了赋值运算符重载函数以外,所有的运算符重载函数都可以被派生类继承。 (原因:“赋 值运算符重载函数”不是不能被派生类继承,而是被派生类的默认“赋值运算符重载函数”给 覆盖了。这就是 C++赋值运算符重载函数不能被派生类继承的真实原因! )

c++中的操作符重载(转)

不羁岁月 提交于 2019-12-28 10:14:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不妨先直观的看一下所谓的操作符重载: #include <iostream> using namespace std; int main() { int a = 2 , b = 3; float c = 2.1f , d = 1.2f; cout<<"a + b = "<<a+b<<endl; cout<<"c + d = "<<c+d<<endl; return 0; } 我们看到操作符“+”完成 float 和 int 两 种类型的加法计算,这就是操作符重载了。这些内置类型的操作符重载已经实现过了,但是如果现在我们自己写过的类也要实现实现类似的加法运算,怎么办呢?? 比如现在现在有这样一个点类point,要实现两个点的相加,结果是横纵坐标都要相加,这时候就需要我们自己写一个操作符重载函数了。 #include <iostream> using namespace std; class point { double x; double y; public: double get_x() {

运算符重载的本质理解和数组运算符重载的实现

こ雲淡風輕ζ 提交于 2019-12-28 10:14:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 了解了运算符重载,就会觉得其十分的简单。 所谓重载,就是重新赋予新的意义。函数重载就是对于一个已有的函数重新赋予新的含义,使之实现新的功能。运算符也可以重载,在我们进行整数间的加法时,C++编译器已经对+运算符进行了重载。又如我们在使用位运算符<<、>>进行输入和输出操作时,C++系统已经分别重载了流对象cin和cout的<<、>>运算符,我们只需引入头文件iostream(当然还应当包括 ”using namespace std“ )。 运算符重载的设计初衷 由于每个数据类型都有自己的运算符规则,C++编译器只是重载了基本数据类型的的运算符, 对于复杂的数据类型(自定义的类),由于其定义者对其的运算规则要求不同,所以C++编译器就把重载复杂数据类型运算符的任务交给了其定义者 ,定义者可以根据自己的需要重载复杂数据类型的运算符。 运算符重载本质 就是一个函数 , 用来重新定义复杂的数据类型实例对象(同类型)间运算规则的 函数。 运算符重载的使用 使用的两种方式 : 1、全局函数实现 2、类的成员函数实现 使用步骤 (按照这个步骤来就很简单) 1)要承认操作符重载是一个函数,写出函数名称operator+ () 2)根据操作数,写出函数参数(如果全局函数实现,要多一个这类的对象参数;如果是成员函数

运算符重载

笑着哭i 提交于 2019-12-23 00:18:18
生成一个表示复数的类FS。复数的实部sb和虚部xb作为其数据成员。提供成员函数print()显示复数(格式:-3+5i或6-2i),重载“+”、“-”为FS类的成员函数,用来计算两个复数的和、差。 思路导航: ① 定义类,设计构造函数和显示函数print(); ② 重载运算符“+”、“-”为类FS的成员函数。 ③ 实例化FS类的2个对象,并利用重载的运算符对其进行计算。 另外,根据上述定义,试将上述的运算符重载成员函数改写成友元函数。 # include "iostream.h" # include "FS.h" void FS :: SetFS ( double s , double x ) { sb = s ; xb = x ; } void FS :: print ( ) { if ( sb == 0 ) { if ( xb == 0 ) { cout << "0" << endl ; } else if ( xb == 1 ) { cout << "i" << endl ; } else { cout << xb << "i" << endl ; } } if ( sb != 0 ) { if ( xb == 1 ) { cout << sb << "+" << "i" << endl ; } else if ( xb == 0 ) { cout << sb << endl

运算符重载笔记

≡放荡痞女 提交于 2019-12-22 23:24:18
运算符重载笔记 参考源码 class OperatorOverloading : _size = 999 # def __init__(self): # 定义_size值的两种方法 # self._size = 999 def __len__ ( self ) : """ len() :return: """ return self . _size def set_size ( self , size ) : self . _size = size if __name__ == '__main__' : gy = OperatorOverloading ( ) gy . _size = 123 # gaib gy . set_size ( 456 ) print ( len ( gy ) ) __len__为系统定义好的的方法名,使用len方法时,本质上就是调用了对象的__len__方法。 __len__方法的参数、返回值类型、方法名是确定的,函数体可以自己定义。 来源: CSDN 作者: 笨小鱼 链接: https://blog.csdn.net/gu305524073/article/details/103656589

C++ 中的运算符重载

我的梦境 提交于 2019-12-17 15:36:19
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。 运算符也可以重载 ..运算符重载是对已有的运算符赋予多重含义... // 也就是说重载完之后,会根据我们定义的重载函数 自动调用最符合调用的方法使用...比如我们定义的类的重载运算符+. 当我们使用类的对象相加时,会自动调用我们定义的重载...而当我们使用内置的+法运算,比如 int b=5+3; 那么这是还是调用内置的+法运算进行处理 .. C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类). // 同上,内置的运算符 只能应用于内置的数据类型 ...比如 int char double .等等。 (一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 // 就是说只能重载内置的 + - * / 等运算符,不能自己创造运算符计算。 。 (二) C++允许重载的运算符C++中绝大部分的运算符允许重载. 不能重载的运算符只有5个: (1) 成员访问运算符. (2) 作用域运算符∷ (3) 条件运算符?: (4) 成员指针运算符* (5) 编译预处理命令的开始符号# (三) 重载不能改变运算符运算对象(即操作数)的个数。 // 不能改变运算符运算对象, 比如+法运算符,那么它有两个操作数 ..当我们重载它的时候 也只能有两个操作数 。

C++运算符重载

对着背影说爱祢 提交于 2019-12-16 10:15:13
运算符重载是为了解决这样一类问题:我们知道对于整型可以用二元运算符(就是+,-,*,/因为这些运算都是两个变量参与,所以谓之二元,相比之下一元运算符就是自增,自减运算)直接进行运算,但对于类这样的数据结构直接的加减运算显然不被支持,这就需要用到运算符重载的概念 全局函数形式----返回类型 operator关键字 运算符(参数列表) 以数学中的复数为例,运算符重载可实现实部和虚部的分别相加 #include<iostream> using namespace std; class complex { public: int a; int b; public: complex(int a=0,int b=0) { this->a = a; this->b = b; } void printmyself() { cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl; } }; complex myadd(complex &c1, complex &c2) { complex temp(c1.a + c2.a,c1.b+c2.b); return temp; } complex operator+(complex &c1,complex &c2)//一个典型运算符重载 { complex temp(c1.a+c2.a