객체 지향이 어쩌구 하는건 OOAD에 설명해놨으니 그거 보라능(내가 귀찮아서 이럼)
먼저 클래스란?
클래스는 속성과 행위를 갖는 레코드형과 비슷한 일종의 자료형이다.
클래스 형으로 정의한 변수는 그 자체가 개체가 되는 것이 아니라
메모리에 자리 잡기 위해서는 인스턴스 하는 작업이 필요한데 이를 생성이라고 한다.
델파이에서 클래스 선언
type
클래스 이름 = class (부모클래스)
멤버 선언
end;
부모클래스를 생략하면 TObject를 계승 받는다.
sealed로 표시된 클래스는 상속이 불가능 하다
--------------------------------------------------------------
- 생성자란?
개체를 생성하고 초기화 하는 동작을 수행하는 루틴
오브젝트가 생성되기 전에 호출되기 때문에 클래스 이름으로 지정해서 호출
Constructor 로 시작하는 프로시저임.
생성자 작성법
Constructor TMyobj.Create; //TMyobj가 클래스명
Constructor TCompoent.Create(AOwner:TCompoent); //TCompoent가 클래스명
- 파괴자란?
생성자와 반대로 작업을 정리하고 메모리를 해제하는 기능을 수행
Destructor 로 시작하는 프로시저
파괴자 작성법
Destructor TMyobj.Destroy; //TMyobj는 클래스명
- Free
Myobj.Free;
--------------------------------------------------------------------------
상속
상속이란?기존의 클래스를 기반으로 새로운 클래스를 정의하는 것.
이것은 귀찮으니 만든 코드로 설명하겠음 -_-;
----------------------------------------------------------------------------
unit Unit6;
interface
type
TPerson = class(TObject) //TObject 상속받은 TPerson 클래스 생성
private //오직 이 클래스에서만 사용
ttt : String;
public //다음의 내용은 다른 클래스에서도 사용
Name : String;
Age : byte;
Address : String;
Constructor Create; virtual; //create의 내용을 상속하여 사용
function Getname : String;
end;
TEmp = class(TPerson)
public
office : String;
Empno : Integer;
Baserate : real;
Constructor Create; override; //create를 상속받아 재사용
function Salary : real; virtual; abstract; //salary 함수 재사용
end;
THourly = class(TEmp)
Hrs : Integer;
Constructor Create; override; //create를 재정의하여 사용
function Salary : real; override; //salary를 재정의하여 사용
end;
TSalary = class(TEmp)
Salesamt : real;
Commissionrate : real;
Constructor Create; override;
function Salary : real; override;
end;
implementation
{ TPerson }
//사원 정보 입력
constructor TPerson.Create;
begin
Name := 'Kim';
Age := 20;
Address := 'Anywhere';
end;
//사원 이름을 호출하는 함수
function TPerson.Getname: String;
begin
Result := Name;
end;
{ TEmp }
constructor TEmp.Create; //TPerson에서 정의한 Create를 상속받음
begin
inherited; //부모클래스의 메소드를 호출하라는 예약어.
office := 'bbk';
Empno := 1;
Baserate := 10;
end;
{ THourly }
constructor THourly.Create;
begin
inherited;
Hrs := 10;
end;
function THourly.Salary: real;
begin
Result := Baserate * Hrs;
end;
{ TSalary }
constructor TSalary.Create;
begin
inherited;
Commissionrate := 1;
Salesamt := 5;
end;
function TSalary.Salary: real;
begin
result := (Salesamt * Commissionrate) + (Baserate + 40.0);
end;
end.
---------------------------------------------------------------
흐미 이게 뭔소리당가? 한다면 걍 답답할 뿐이다.
설명을 하자면.
TObject -> TPerson -> Temployee -> TSalary
-> THourly
로 상속을 받은 것이다.
먼저 interface 안에서 클래스를 생성하고 컨트롤 + 시프트 + C를 누르면
implementation 아래에 자동으로 틀이 만들어진다.
설마 이걸 하나하나 친 사람은 없겠지? >.<;
만들어진 틀 안에 코딩하면 된다.
inherited 라는게 있는데 이건 부모 클래스의 해당 이름으로 된 메소드를 호출에서 쓰겠다는 것이다.
친절하게 곳곳에 주석도 달았으니 알아서 보길 바란다.(어차피 보는 사람도 적은데 츤츤)
다음에는 컴포넌트를 사용해서 간단하게 만들어 보겠다~
다음이래봐야 잠깐 쉬고 쓸꺼다 -_-
길면 읽지를 않으니 원.
댓글 없음:
댓글 쓰기