C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[9746] 저기... 주정섭님... 미안한 부탁인데 이것좀 해결해 주시면 안될까요?
어떤게좋을까요? [] 1397 읽음    2004-07-14 09:14

여기 볼랜드 포럼, 델파이 채널, 큐앤에이 게시판에 질문을 올려두었는데 다들 바쁘신지
묵묵부답 이시네요. ^^

혹시 아시는 내용 이라면 도움좀 부탁 드리겠습니다.

http://www.borlandforum.com/impboard/impboard.dll?action=read&db=del_qna&no=9713

읽어 주셔서 감사감사...

주정섭 님이 쓰신 글 :
: 여러 사람이 참여할 수 있는 강좌 게시판 문화를 만들기 위해, 매우 간단하지만, 다소 알송달송한 델파이 관련 문제를 제출해 보려한다.
:
: 이 문제들의 정답은 매우 간단하다. 만일 정답 문장이 두 문장 이상을 초과한다면 정답이 아닐 가능성이 크다. 다음 모든 문제의 답들은 한 문장으로 답변할 수 있어야 한다. 
:
: [문제에 대한 전제 조건]
:
: 1. 모든 문제에서 TMyClass은 클래스 혹은 사용자 정의 데이타형 이라고 가정
: 2. Method1...MethodN은 해당 클래스의 메서드명이라고 가정
: 3. Field1...FieldN은 해당 클래스의 필드멤버라고 가정
:
: 자 문제를 본격적으로 풀어 보자.
:
: [문제1] 다음과 같은 표현식이 가능하려면 어떻게 해야 하는가? 이 문제의 핵심은, 메서드끼리 연속하여 호출할 수 있게 하려면 어떤 방식으로 Method1,Method2, Method3을 정의해야 하는가이다.
:
: var
:  obj : TMyClass;
: begin
:  obj := TMyClass.Create();
:  obj.Method1().Method2().Method3();
: end
:
: [문제2] 일반적으로 오브젝트는 반드시 생성자를 호출해야만 사용이 가능하다. 생성자를 호출하지 않고서도 사용가능한 오브젝트를 정의하려면 어떻게 해야 하는가? 즉 다음과 같은 문법이 가능하려면, TMyClass를 어떻게 정의해야 하는가?
:
: var
:  obj : TMyClass;
: begin
:  // obj := TMyClass.Create; 생성자를 호출하지 않았음
:  obj.Field1 := 100;
:  obj.Method1(1000);
:  obj.Method2(2000);
: end
:
: [문제3] SomeFunc()가 함수라고 가정했을 때, 다음과 같은 표현이 델파이에서 가능한가? 이 문제의 핵심은 델파이에서 lvalue로 함수를 사용할 수 있는가이다.
:
: var
: ...
: begin
:  SomeFunc() := 'afadsfas';
: end
:
: [문제4] const로 정의된 변수 값을 변경하려 하면 컴파일 에러가 발생한다. 다음 소스는 그런 예제이다. 어떻게 하면 const 변수의 값을 변경해도 컴파일러가 에러를 발생하지 않게 할 수 있는가? 즉, const 변수 값을 실행시 수정할 수 있도록 하려면 어떻게 해야 하는가? 그리고 이 편법(?)적인 방법을 어떤 경우에 사용하면 좋은가?
: ...
: implementation
:
: {$R *.dfm}
:
: const ConstValue : integer = 20;
:
: procedure TForm1.FormCreate(Sender: TObject);
: begin
:    ConstValue := 30; // Compile Error
: end;
:
: end.
:
: [문제 5] 다음과 같이 TMyClass를 정의했다고 가정하자. 그리고 MethodX를 다음과 같이 정의했다고 가정하자. field1과 filed2를 참조하는 라인에서 컴파일 에러가 발생하는 이유는 무엇인가?
:
: type
:  TMyClass = class(TObject)
:  private
:    field1, field2: integer;
:  public
:    class procedure MethodX;
:  end;

: implementation
:
: class procedure TMyClass.MethodX;
: begin
:    field1 := 20; // compile error
:    field2 := 30; // compile error
: end;
:
: [문제6] 다음과 같은 Unit1, Unit2라는 두 유닛이 있다고 가정하자. Unit1에서는, Unit2에 정의 되어 있는 TTest 클래스 field1 멤버 참조문에서 컴파일 에러가 발생한다. 그런데 Unit2의 TTest2 클래스는 TTest1의 private 멤버인 field1을 참조하는데 아무런 문제가 없다. 그 이유는 무엇인가?
:
: // ----------------Unit1.pas의 내용 -------------------------
: unit Unit1;
:
: interface
:
: uses
:  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
:  Dialogs;
:
: type
:  TForm1 = class(TForm)
:    procedure FormCreate(Sender: TObject);
:  private
:    { Private declarations }
:  public
:    { Public declarations }
:  end;
:
: var
:  Form1: TForm1;
:
: implementation
:
: {$R *.dfm}
:
: uses Unit2;
:
: procedure TForm1.FormCreate(Sender: TObject);
: var
:    tt : TTest1;
: begin
:    tt := TTest1.Create;
:    tt.field1 := 20; // Compiler Error!
: end;
:
: end.
:
: //---------------------------- Unit2.pas의 내용 ----------------------------------------
: unit Unit2;
:
: interface
:
: type
:  TTest1 = class(TObject)
:  private
:    field1 : integer;
:  end;
:
:  TTest2 = class(TObject)
:  public
:    procedure Method1;
:  end;
:
: implementation
:
: { TTest2 }
:
: procedure TTest2.Method1;
: var
:    tt : TTest1;
: begin
:    tt := TTest1.Create;
:    tt.field1 := 20; // 컴파일 에러 발생하지 않음. 컴파일 OK
: end;
:
: end.
:
: 만일 이 문제 모두를 보는 즉시 답할 수 있었다면, 즉 예제를 컴파일하고 실행해 보지 않고도 즉시 풀었다면 당신은 엄청난 오브젝트 파스칼 고수임에 틀림없으므로 삼가 경의를 표하는 바입니다.
:
: 만일 그러한 분이라면 즉시 댓글을 남겨서 자신의 이름을 공표해주기 바랍니다.
:

+ -

관련 글 리스트
9738 함께 풀어봅시다. 오브젝트 파스칼 관련 간단한 문제 몇개 주정섭 1337 2004/07/12
9746     저기... 주정섭님... 미안한 부탁인데 이것좀 해결해 주시면 안될까요? 어떤게좋을까요? 1397 2004/07/14
9739     문제가 너무 쉬웠다는... ㅠ.ㅠ 어떤게좋을까요? 1113 2004/07/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.