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

C++빌더 Q&A
C++Builder Programming Q&A
[20924] No! 여기서 <<는 쉬프트 연산자가 아니라 집합 연산자입니다.
김백일 [cedar] 1617 읽음    2002-08-21 10:44
얼큰 님이 쓰신 글 :
: 안녕하세요?
: 얼큰이 이성현입니다.
:
: 우선 TShiftState() << ssCrtl
: 에서 TShiftState()를 하게 되면 어떤 값이 리턴 될것이구요.
: "<<" 이거는 쉬프트 연산자입니다. 검색해 보면 나올겁니다. 브트를 좌로 이동하는거져..
: ssCrtl만큼요..

TShiftState는
typedef Set<Classes__1, ssShift, ssDouble>  TShiftState;
로 정의되어 있는 Set(집합) 타입입니다.
(ANSI C++ STL의 std::set과는 다릅니다. 대소문자 주의!)
Set 타입은 다음과 같이 정의된 템플릿 클래스입니다.
Set<type, minval, maxval>
여기서 type은 int, char, 또는 enum 타입이고,
minval의 최소값은 0, maxval의 최대값은 255입니다.
그러므로 Set은 최대 256개의 원소를 가질 수 있습니다.

TShiftState() << ssCrtl
라고 하면 TShiftState 타입 임시 집합 객체에 ssCtrl 값을 insert한다는 의미입니다.
Set<type, minval, maxval>::operator<<()가 겹지정(overloading)되어 있기 때문입니다.
반대로
TShiftState() >> ssCrtl
라고 하면 ssCtrl 값을 삭제한다는 의미지요.

VCL의 많은 곳에서 이 Set 타입을 사용하고 있습니다.
(예를 들어 StringReplace() 함수)
자세한 것은 Set의 도움말을 참고하세요.

: 빌더를 실행시키고 소스에
: OpenCommand->ShortCut = ShortCut(Word('O'), TShiftState() << ssCtrl);
: 이렇게 쓰신후에 ssCtrl위에 마우스를 놓고.. 오른쪽 버튼누른후에...Find Declaration을
: 선택하면..
: enum Classes__1 { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble };
: 이부분이 나옵니다.
:
: 그러니 TShiftState() << 2 라고 생각하시면...

만약,
Set<char, 0, 255> charset;
일 때,
charset << 255;
라고 하면, charset을 255비트 쉬프트한다는 의미인가요? -_-;;

하여튼, C++의 연산자 겹지정(operator overloading)에 항상 주의하셔야 합니다.
기본 타입이 아닌, 클래스에 사용된 연산자는 오버로딩되었다는 것을 유의하세요!

: 너무 주저리주저리 늘어 놓은것 같군요... 즐거운 하루 보내세요.
:
:
: 윤종희 님이 쓰신 글 :
: : This line creates a shortcut, Ctrl+O, at run time and assigns it to the Open command on a File menu.
: :
: : OpenCommand->ShortCut = ShortCut(Word('O'), TShiftState() << ssCtrl);
: :
: : ShortCut 예제를 보니깐 위에 예제가 나오더라구요.
: :
: : 예제중에 << 라는게 있는데 이게 무슨뜻인가요?
: : TShiftState() << ssCrtl .... 허허...
: :
: : 행복하세요.. ^^
: :
: : 24살 늦은 여름 [# 윤종희 #]

+ -

관련 글 리스트
20912 [# shortcut #] 윤종희 769 2002/08/21
20918     Re:[# shortcut #] 얼큰 898 2002/08/21
20924         No! 여기서 <<는 쉬프트 연산자가 아니라 집합 연산자입니다. 김백일 1617 2002/08/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.