메소드 오버로드


메소드는 overload 지시어를 사용하여 재선언할 수 있습니다. 재선언된 메소드가 조상과 다 른 파라미터 시그너처를 가지는 경우 재선언된 메소드를 숨기지 않고 상속된 메소드를 오버 로드합니다. 자손 클래스의 메소드를 호출하면 호출한 루틴의 파라미터와 일치하는 구현이 선택됩니다.


가상 메소드를 오버로드하는 경우 자손 클래스에서 가상 메소드를 재선언할 때 reintroduce 지시어를 사용합니다. 아래 예를 참고하십시오. 


Object_10_1.png


클래스 내에서 이름이 같은 여러 오버로드된 메소드를 published로 사용할 수 없습니다. 런타 임 타입 정보(RTTI)를 유지하기 위해 각각의 published 멤버에 대한 고유 이름이 필요합니다. 


Object_10_2.png


read나 write 속성 지정자 역할을 하는 메소드는 오버로드할 수 없습니다.
오버로드된 메소드의 구현의 파라미터 리스트는 클래스 선언에서 지정했던 파라미터 리스트 와 같아야 합니다.오버로드에 대한 자세한 내용은 5장의“프로시저와 함수 오버로드”를 참조 하십시오.


생성자


생성자(constructor)는 인스턴스 객체를 만들고 초기화하는 특수한 메소드입니다. 생성 자 선언은 프로시저 선언과 비슷하지만 constructor로 시작합니다. 예를 들면 다음과 같 습니다. 


Object_10_3.png


생성자는 기본인 register 호출 규칙을 사용해야 합니다. 선언에서는 리턴 값을 지정하지 않 지만, 생성자는 자신이 생성한 객체 혹은 호출된 객체에 대한 참조를 리턴합니다.

클래스는 두 개 이상의 생성자를 가질 수 있지만, 대부분의 클래스는 하나만 있습니다. 일반 적으로 Create 생성자를 호출하는 것이 일반적입니다.


객체를 만들려면 클래스 타입에 대한 생성자 메소드를 호출합니다. 예를 들면, 다음과 같습 니다. 


Object_10_4.png


이 문법은 힙(heap)에 새 객체를 위한 메모리를 할당하고, 모든 서수 필드 값을 영(0)으로 설정하며, 모든 포인터와 클래스 타입 필드에 nil을 지정하고, 모든 문자열 필드를 빈 (empty) 문자열로 초기화합니다.

그 다음으로 생성자의 구현에서 지정한 다른 동작들이 실행됩니다. 일반적으로 생성자에 전 달된 파라미터로 객체가 초기화됩니다. 마지막으로 생성자는 새로 할당 및 초기화된 객체에 대한 참조를 리턴합니다. 리턴 값 타입은 생성자를 호출하면서 지정한 클래스 타입과 동일합 니다.


클래스 참조에서 호출된 생성자의 실행 중에 예외가 발생하면, 자동으로 Destroy 소멸자 정 상적으로 생성되지 못한 객체를 소멸하기 위해 자동으로 호출됩니다.

클래스 참조가 아닌 객체 참조를 사용하여 생성자를 호출하면 생성자는 객체를 생성하지 않 습니다. 그 대신, 생성자는 지정한 객체에 대해 생성자 구현에 있는 문장들만 실행한 다음 객 체에 대한 참조를 리턴합니다. 생성자는 일반적으로 상속된 생성자를 실행하기 위해 예약어 inherited와 함께 호출됩니다.


클래스 타입과 클래스 타입 생성자에 대한 예제는 다음과 같습니다. 


Object_10_5.png


생성자의 첫 번째 동작은 일반적으로 상속된 생성자를 호출하여 객체의 상속된 필드들을 초 기화하는 것입니다. 그런 다음 생성자는 자손 클래스에서 추가한 필드들을 초기화합니다. 생 성자는 항상 새로운 객체에 할당된 메모리를 지우기 때문에, 모든 필드 값은 처음에 0(서수 타입), nil(포인터 타입 및 클래스 타입), 빈 문자열(문자열 타입) 또는 Unassigned(variant 타입)이 됩니다. 따라서 0이 아닌 값이나 빈 값이 아닌 값이 아니라면 생성자에서 필드를 초 기화할 필요가 없습니다.


클래스 타입 식별자를 통해 호출된 경우, virtual로 선언된 생성자는 정적(static) 생성자와 동일합니다. 그러나 클래스 참조 타입과 함께 사용하면 가상 생성자는 다형적인 객체 생성, 즉 타입이 컴파일 시에 알려지지 않는 객체 생성을 허용합니다. 6장의“클래스 참조”를 참조 하십시오. 



참조링크

델파이 프로그래밍 언어 - 엠바카데로 저 | 박지훈 역 (2009년) 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15465
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13970
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16505
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22061
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23270
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18930
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39264
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174728
503 [시애틀] 안드로이드 서비스 앱을 만들 수 있습니다. Humphery 2015.09.07 691
502 [시애틀] 블루투스 LE를 지원하는 디바이스에서 비콘 광고데이터를 발생할 수 있습니다. file Humphery 2015.10.06 690
501 [10.4 시드니][패치] RAD스튜디오 10.4 '세 번째 패치(Patch 3)': VCL그리드, C++Win64 디버깅, C++ 안드로이드 예외처리 핸들링 및 리소스 등 관리자 2020.07.29 686
500 [고객사례-유틸리티, 델파이] 녹음기 앱 - Voice Recorder 관리자 2019.12.10 686
499 [커뮤니티 에디션] 사용 자격 기준 정리 관리자 2018.11.29 686
498 [고객 사례- 3D, 시뮬레이션, 델파이] 3D Train Studio 관리자 2017.03.02 682
497 [10.4 시드니 신기능] iOS와 맥OS 지원 강화 관리자 2020.06.04 681
496 [베를린 U1] 윈도우 태스크바 알림의 뱃지를 제어할 수 있습니다. 험프리 2016.09.20 680
495 [고객 사례- 의료, 델파이+임베디드DB] Siemens Healthcare 의 체외진단기기 (IVD, In Vitro Diagnostics) file 관리자 2016.11.03 680
494 [10.4 시드니 신기능] 언어 서버 프로토콜 (LSP, Language Server Protocol) 관리자 2020.06.04 678
493 [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 17. 1차원 정적 배열 관리자 2019.03.29 678
492 [프로그래밍 애피타이저] 8장 SQL 정의와문법 file 김원경 2020.04.09 677
491 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 7. 중접된 If...Then...Else 문. 작업 해결 실습하기 관리자 2019.03.29 676
490 [업데이트][핫픽스][10.1 베를린] 갤럭시 S7 Edge(안드로이드 6.0.1) 디버깅이 되지않는 이슈 패치 험프리 2016.05.27 676
489 [델파이 샘플 코드] 안드로이드, iOS, OSX, 윈도우, 리눅스, HTML5 관리자 2019.11.13 674
488 [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 23. 타이머 관리자 2019.03.29 674
487 [도서/PDF/소스코드] 델파이 Begin...End - 14장. 분산처리(DataSnap) 관리자 2019.08.20 673
486 Class에서 Interface 두 개 구현할 때, 이 둘이 동일한 이름의 메소드(Method)를 가지고 있다면? file 험프리 2019.12.11 672
485 가장 강력한 ‘데이터베이스 연동’ 기능을 자체적으로 제공하는 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.03.04 669
484 델파이, C++빌더의 윈도우10과 High DPI 디스플레이 지원 김원경 2020.02.28 668