DELPHI8对操作符的重载很爽!(100分)

  • 主题发起人 主题发起人 wr960204
  • 开始时间 开始时间
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
unit WinForm;

interface

uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data;

type
TWinForm = class(System.Windows.Forms.Form)
{$REGION 'Designer Managed Code'}
strict private
/// <summary>
/// Required designer variable.
/// </summary>
Components: System.ComponentModel.Container;
Button1: System.Windows.Forms.Button;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure InitializeComponent;
procedure Button1_Click(sender: System.Object
e: System.EventArgs);
{$ENDREGION}
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: Boolean)
override;
private
{ Private Declarations }
public
constructor Create;
end;

//写成类也可以,这里我用了记录。由于记录是值类型省去了创建实例的麻烦
TClassTest=record
public
FA:Integer;
//重载了“+”操作符
class operator add(A,B:TClassTest):TClassTest;
end;

[assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))]

implementation

{$REGION 'Windows Form Designer generated code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWinForm.InitializeComponent;
begin
Self.Button1 := System.Windows.Forms.Button.Create;
Self.SuspendLayout;
//
// Button1
//
Self.Button1.Location := System.Drawing.Point.Create(96, 88);
Self.Button1.Name := 'Button1';
Self.Button1.Size := System.Drawing.Size.Create(392, 112);
Self.Button1.TabIndex := 0;
Self.Button1.Text := 'Button1';
Include(Self.Button1.Click, Self.Button1_Click);
//
// TWinForm
//
Self.AutoScaleBaseSize := System.Drawing.Size.Create(6, 14);
Self.ClientSize := System.Drawing.Size.Create(560, 357);
Self.Controls.Add(Self.Button1);
Self.Name := 'TWinForm';
Self.Text := 'WinForm';
Self.ResumeLayout(False);
end;
{$ENDREGION}

procedure TWinForm.Dispose(Disposing: Boolean);
begin
if Disposing then
begin
if Components <> nil then
Components.Dispose();
end;
inherited Dispose(Disposing);
end;

constructor TWinForm.Create;
begin
inherited Create;
//
// Required for Windows Form Designer support
//
InitializeComponent;
//
// TODO: Add any constructor code after InitializeComponent call
//
end;

procedure TWinForm.Button1_Click(sender: System.Object
e: System.EventArgs);
var
A,B,C:TClassTest;
begin
A.FA :=1;
B.FA :=2;
C:=A+B
//两个结构(或者类)用+操作,在DELHI8以前是不可想象的
system.Windows.Forms.MessageBox.Show(System.Convert.ToString(C.FA) );
end;

{ TClassTest }

//重载“+”操作符的实现
class operator TClassTest.add(A, B: TClassTest): TClassTest;
begin
Result.FA:=A.FA + B.FA;
end;

end.
 
C++早就可以用了,这有什么了不起的。
 
我没说DELPHI支持操作符重载有什么了不起呀。只是说爽。
我不想引起语言的争论。只是想说C++也有不足之处。如果你习惯了PASCAL的集合,你在用C++进行繁琐的位运算去搞,或者用一大堆IF去搞。就知道每个语言都有自己的长处。
 
作为一个合格的适合团队开发的程序员,更关注的是让别人轻松的看懂你的程序,任何可能引起歧异的语句都不应该出现
 
hellorookie,我支持你,你说得最有道理。
if 大家都如此想 then
天下就太平了;

 
运算符重载还是挺有用的,特别是数学远算,还有就是把钱和数量封装为类和结构,
任何一项技术都有其作用的。。。
 
还有DELPHI8中字符串不再是简单类型,而是类。那么“+”不重载的话两个类实例相加算什么??
扩充操作符重载是必然的
 
后退
顶部