Pascal'这个'参考

时间:2012-12-30 03:06:13

标签: oop this pascal freepascal

我开始用面向对象的方法探索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.

2 个答案:

答案 0 :(得分:3)

没想到我会回答我的问题。

找到答案here

如果要在嵌套函数中复制变量名,则必须使用{$mode delphi}而不是{$mode objfpc}

答案 1 :(得分:2)

  1. 不要对参数和属性使用相同的名称。使用前缀A作为参数。
  2. 不要实现getter和setter方法。在Pascal中使用属性关键字。
  3. 使用前缀F表示私有字段。
  4. 使用前缀T作为自定义类型。
  5. 以下是您班级的示例:

    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;