运算符重载

delphi 运算符重载

醉酒当歌 提交于 2019-11-26 19:22:18
譬如上面的 record 可以这样声明: type TMyRec = record name: string; age: Word; class operator GreaterThan(a,b: TMyRec): Boolean; end; 还得有方法的实现(遗憾的是有些不能用 Ctrl+Shift+C 自动建立, 那就复制吧): class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean; {注意复制后再加上方法名: "TMyRec."} begin Result := a.age > b.age; end; Delphi for Win32 只支持 record 类型的运算符重载,而 Delphi .NET 还支持 class 类型的运算符重载 下面是Delphi支持的可重载运算符 运算符 类型 声明语法 应用符号 Implicit 转换 Implicit(a: type): resultType; 隐式转换 Explicit 转换 Explicit(a: type): resultType; 显式转换 负 一元运算 Negative(a: type): resultType; - 正 一元运算 Positive(a: type): resultType; + 递增 一元运算 Inc(a: type): resultType

运算符重载和深浅拷贝

邮差的信 提交于 2019-11-26 17:55:23
对于某些运算符号(+,-,*,/....),我们不满足与它原有的操作方式,而是要在对 特有对象 (如负数的加减)进行使用,但是编译器会不允许这样做,因为会与操作符 原本的类型不匹配 而导致操作失败。因此我们需要对运算符进行重载,即赋予它新的意义,从而满足我们的使用需求。 如complex_a和complex_b是两个复数对象求两个复数的和, 希望能直接写:complexa + comple_b  运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象 。  同一个运算符, 对不同类型的操作数,所发生的行为不同。  对于复数对象:complex_a + complex_b => 生成新的复数对象  对于整数:5 + 4 = 9 运算符重载的 实质是函数重载 , 它可以重载为普通函数,也可以重载为成员 ,在对含有该运算法的表达式转换时,调用对应的运算符函数完成重载的操作。( 依据参数的类型进行匹配 ) 1 class Complex 2 { 3 public:double real,imag; 4 Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) {} 5 Complex operator-(const Complex & c); 6 }; 7 Complex operator + ( const

运算符重载

主宰稳场 提交于 2019-11-26 17:11:41
#include <iostream> using namespace std; class Distance { private: int feet; // 0 到无穷 int inches; // 0 到 12 public: // 所需的构造函数 Distance(){ feet = 0; inches = 0; } Distance(int f, int i){ feet = f; inches = i; } // 显示距离的方法 void displayDistance() { cout << "F: " << feet << " I:" << inches <<endl; } // 重载负运算符( - ) Distance operator- () { feet = -feet; inches = -inches; return Distance(feet, inches); } // 重载小于运算符( < ) bool operator <(const Distance& d) { if(feet < d.feet) { cout<<d.feet<<endl; return true; } if(feet == d.feet && inches < d.inches) { return true; } cout<<d.feet<<" "<<d.inches<<endl

关系运算符重载

岁酱吖の 提交于 2019-11-26 13:50:47
C++语言支持各种关系运算符重载(<,>,>=,<=,==),他们可用于比较C++内置的数据类型。 支持重载任意一个关系运算符,重载后的关系运算符可以用于比较类的对象。 /*** overrealate.cpp ***/ #include<iostream> using namespace std; class Distance { private: int feet; int inches; public: Distance() { feet = 0; inches = 0; } Distance(int f,int i) { feet = f; inches = i; } void displayDistance() { cout << "F: " << feet << " I: " << inches << endl; } Distance operator- () { feet = -feet; inches = -inches; return Distance(feet,inches); } bool operator <(const Distance& d) { if(feet < d.feet) { return true; } if(feet == d.feet && inches < d.inches) { return true; } return false;