C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[604] C++ 빌더의 __property 와 C++의 property
김태선 [jsdkts] 13887 읽음    2006-05-06 15:44
C++ 빌더에서는 C++에는 없는 __property 라는 예약어가 있습니다.
보통 클래스에서 멤버를 읽고 쓰는 일상적인 과정에서
읽고 쓰는 동작을 구현할 함수를 지정할 수 있게 하기 위해 사용합니다.
이는 단순히 가상멤버변수를 대입하거나 대입 받을때 원하는 동작이 일어나게 함으로써
직관적인 코딩이 가능하게 하며, 값의 오대입을 막거나 원하는 부가 처리를 하기 위한 용도로 사용합니다.
특히 외부에 내부를 공개하지 않는 COM 플밍에 있어서는 거의 필수처럼 사용합니다.
C++언어 스펙중에 좀 아쉬운 부분이 바로 get set 을 정의할 수 있는 프로퍼티를 표준으로 설정하지 않았다는 점입니다.

하지만 C++빌더에서는 __property라는 예약어를 추가함으로써 이와 같은 문제를 해결했으며,
디자인 타임에 프로퍼티 변수를 노출 했을때 안전한 세팅을 가능케 합니다.

하지만 VC++에서도 VC++.NET으로 버전업 되면서 property 를 지원하기 시작했으며,
이 property는 C++빌더에서도 역시 지원하므로 마찬가지로 사용할 수 있습니다.
property 는 디자인 타임용이 아닌 COM 플밍에서와 같이 코딩 레벨에서 사용하기 위한 것입니다.

아래는 C++빌더, VC++ 양쪽에서 동작하는 프로퍼티의 예입니다.
중요한 점은 컴포넌트 만들때 디자인 타임에 프로퍼티 창에 나타나는 용도가 아닌
일반 클래스의 설계시에 이용할 수 있다는 것입니다.

물론, 빌더의 __property도 public: 영역지정자에 두는 식으로 일반 클래스 설계에도 이용할수 있지만
C++빌더, VC++ 양쪽에서 모두 사용 가능하다는 점이 틀리죠.

class Cproperty
{
private:
    int m_ID;
public:
    __property int ID2 = {read = GetID, write = PutID }; // 볼랜드만의 __property 경우. VC++에서는 삭제필요.
    __declspec(property(get=GetID, put=PutID)) int ID;  // 가상멤버 프로퍼티변수, VC++에서도 동작함.

    int GetID()
    {
        Form1->Memo1->Lines->Add("GetID");
        return m_ID;
    }
    void PutID(int ID)
    {
        Form1->Memo1->Lines->Add("PutID");
        m_ID = ID;
    }
};

실행해서 적당한 값을 넣거나 가져올때 메모장에 GetID 와 PutID 라는
메시지가 찍히는 것을 볼수 있습니다.
__property와 거의 비슷하죠.

생소한 사항이라 참고적으로 올립니다.

+ -

관련 글 리스트
604 C++ 빌더의 __property 와 C++의 property 김태선 13887 2006/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.