Q&A

  • [기초] override,overload,virtual...OOP질문이요~
안녕하세요..델초보 어린왕자인데요..

예제 소스 분석하면서..궁금한점이 있어서 질문해요..



TObject.Create

constructor Create;



TComponent.Create

constructor Create(AOwner: TComponent); virtual;



TControl.Create

constructor Create(AOwner: TComponent); override;



TWinControl.Create

위의 메소드와 같음



TCustomListBox.Create

위의 메소드와 같음



TListBox.Create

위의 메소드와 같음



TThread.Create

constructor Create(CreateSuspended: Boolean);





근데서 여기서 override와 virtual이 어떻게 쓰이는 지 설명 부탁합니다..

여러책을 봤는데..이해가 제대루 안돼서요..

예를 들어

TControl.Create

constructor Create(AOwner: TComponent); override;

는 부모클래스(TComponent)의 Create의 메소드에서 어떻게 바뀐다는 말인가요..

저가 알기로는 override는 인수형태가 변할때 쓰는 키워드로 알고 있는데..

..고수님의 친절한 설명 부탁합니다..





그리구 마지막 질문인데요..



type

TFieldListBox = Class (TListBox)

constructor Create(AOwner: TComponent);override

end;

var TotBtns:integer;

...





constructor TFieldListBox.Create(AOwner: TComponent);

begin

inherited Create(AOwner); // 이문장은 override 없으면 실행하지 않음

Inc(TotBtns); // 리스트박스 카운트

end;



이런소스에서 override키워드를 빼면 inherited~문장이 실행을 하지 않더라구요.

왜그런건지..



type

TQueryThread = class(TThread)

private

QueryForm: TQueryForm;

MessageText: string;

procedure ConnectQuery;

procedure DisplayMessage;

protected

procedure Execute; override;

public

constructor Create(AQueryForm: TQueryForm);

end;

...



constructor TQueryThread.Create(AQueryForm: TQueryForm);

begin

QueryForm := AQueryForm;

FreeOnTerminate := True;

inherited Create(False); // 위의 예제와 같다면 이문장은 실행되지 않는 건가요?

end;



고수님의 친절한 설명 부탁해요..

그럼..즐코딩되세요..





0  COMMENTS