1

私はオブジェクト指向のアプローチで Pascal を探求し始めています。現在のオブジェクトへのまたは参照があるかどうか疑問に思っていましたか? ドキュメントを検索しましたが、答えが見つかりませんでした。thisself

編集
試行錯誤の結果、使用できることがわかりましたself。ここで私の質問は、コンパイラが「重複識別子エラー」をスローせずにこれを達成できるか(以下のスニペット)ですか?

constructor Employee.create(name:String; salary:Real);
begin
  self.name := name;
  self.salary := salary;
end;

私は2人の従業員を作成し、その情報を表示する以下のプログラムを持っています

{$mode objfpc} // directive to be used for defining classes
{$m+}          // directive to be used for using constructor

program EmployeeTest;
type
  Employee = class
  private
    name:String;
    salary:Real;
  public
    constructor create(name:String; salary:Real);
    procedure setName(name:String);
    function getName():String;
    procedure setSalary(salary:Real);
    function getSalary():Real;
    procedure displayEmployee;
end;

var empl1,empl2:Employee;

constructor Employee.create(name:String; salary:Real);
begin
  setName(name);
  setSalary(salary);
end;

procedure Employee.setName(name:String);
begin
  self.name := name;
end;

procedure Employee.setSalary(salary:Real);
begin
  self.salary := salary;
end;

function Employee.getName():String;
begin
  getName := self.name;
end;

function Employee.getSalary():Real;
begin
  getSalary := self.salary;
end;

procedure Employee.displayEmployee;
begin
  writeln('Name: ',getName,', Salary: $',getSalary:0:2);
end;

begin
  empl1 := Employee.create('Bob', 75000);
  empl2 := Employee.create('Joe', 50000);
  empl1.displayEmployee();
  empl2.displayEmployee();
  readln; {pause}
end.
4

2 に答える 2

3

私が私の質問に答えるとは思いませんでした。

ここで答えを見つけました。

ネストされた関数内で変数名を複製する場合は、{$mode delphi}代わりに使用する必要があります。{$mode objfpc}

于 2012-12-30T03:22:25.513 に答える
2
  1. パラメータとプロパティに同じ名前を使用しないでください。パラメータにはプレフィックス A を使用します。
  2. getter メソッドと setter メソッドを実装しないでください。Pascal でプロパティ キーワードを使用します。
  3. プライベート フィールドには接頭辞 F を使用します。
  4. 自己定義型にはプレフィックス T を使用します。

クラスの例を次に示します。

type
  TEmployee = class(TObject)
    private
      FName: String;
      FSalary:Real;
    public
      constructor Create(AName:String; ASalary:Real);
      property Name: String read FName write FName;
      property Salary: Real read FSalary write FSalary;
      procedure DisplayEmployee;
  end;


constructor TEmployee.Create(AName:String; ASalary:Real);
begin
  inherited Create;
  FName := AName;
  FSalary := ASalary;
end;

procedure TEmployee.DisplayEmployee;
begin
  WriteLn('Name: ', FName, ', Salary: $', FSalary:0:2);
end;
于 2012-12-30T12:12:29.557 に答える