一个很简单的类(100分)

  • 主题发起人 主题发起人 新手101010
  • 开始时间 开始时间

新手101010

Unregistered / Unconfirmed
GUEST, unregistred user!
我想设计一个人的类,在这个类中有Name这个数据成员,它记录人的姓名
人的姓名允许外界知道
请问在下面的两个类中,哪个好或重新给我设计一个?为什么?
类1:
TPerson = class
Public
Name: string;
End;

类2:
TPerson = class
Public
Function GetName: string;
Procedure SetName(NewName: string);
Private
Name: string;
End;
Function GetName: string;
Begin
Result := Name;
End;
Procedure SetName(NewName: string);
Begin
Name := NewName;
End;
小弟初学,请指点
 
hehe ,你上面的两个类还不是一样的,只是类2中你多用了两个方法而已,如果觉得有用到那两个方法就用类2了
 
看来楼上的也不太明白呀
 
不要一上来就把自己往类上套。
先看点例子为好。

实在不愿看你的代码,伤身体,莫怪啊~~
 
用第一个类已经足够了,简单,方便.如果属性有其他的限制的话,可以使用第二个方案
 
我现在是想学做类,你不告诉可以不说
就不用说没有用的了
 
我想 Name 设置为属性比较合适。
一般 Set 方法用于检查值,Get 方法一般不用检查,就直接读取私有成员就行了。
这是个例子:
type
TPerson = class(TObject)
private
FName: string;
procedure SetName(AValue: string);
public
property Name: string read FName write SetName;
end;

procedure TPerson.SetName(AValue: string);
begin
if FName <> AValue then
FName := AValue;
end;
 
是啊,用属性比较好一些

要根据实际情况来确定如何封装,
 
{* 良好的设计,应该用OOP的方法!新手开始学,一定要养成面向对象的编码风格,My best wish to you ! *)

TPerson = class
private
FName: string;
protected
procedure SetName(Value: string) ;virtual;
public
property Name: string read FName write SetName;
end;

procedure TPerson.SetName(Value: string);
begin
if FName <> AValue then
FName := Value;
end;

//*** 假如有一天,要设计一个中国人的类 ***//

TChinesePeople = class (TPerson)
private
protected
procedure SetName(Value: string) ;override;
public
end;
procedure TChinesePeople.SetName(Value: string);
var
strName :string;
begin
strName := Value + '_Chinese';
inherited SetName(strName);
end;
 
savetime和coolvc2002都很标准了。我更赞成savetime的,初学者先不要使用虚函数什么的,增加难度,以后慢慢来
 
{* 良好的设计,应该用OOP的方法!新手开始学,一定要养成面向对象的编码风格,My best wish to you ! *)
 
savetime和coolvc2002的方法都很好,要学会用OOP的思想编程,在设计自己的类时设计好类的数据成员的作用域各被访问的范围,保持对象的强内聚和对象与对象之间的松偶合,以保证自己程序的健壮性.
 
后退
顶部