검색결과 리스트
연산자에 해당되는 글 4건
- 2013.01.09 [C#] C# as 연산자
- 2011.11.28 [Java] instanceof 연산자
- 2009.09.15 C++ 캐스트 연산자
- 2009.08.13 타입 변환 연산자
글
링크 : http://msdn.microsoft.com/ko-kr/library/cscsdfbt(VS.80).aspx
호환되는 참조 형식 간에 변환을 수행하는 데 사용됩니다. 예를 들면 다음과 같습니다.
string s = someObject as string; if (s != null) { // someObject is a string. }
as 연산자는 캐스트 연산과 비슷하지만 변환이 가능하지 않은 경우에 as를 사용하면 예외가 발생하지 않고 대신 null이 반환됩니다. 식의 정확한 형식은 다음과 같습니다.
expression as type
이 식은 아래의 식과 동일합니다.
expression is type ? (type)expression : (type)null
그러나 expression 이 한 번만 계산된다는 점은 다릅니다.
as 연산자는 오직 참조 변환과 boxing 변환만을 수행합니다. as 연산자는 사용자 정의 변환과 같은 다른 변환을 수행할 수 없습니다. 사용자 정의 변환은 이 연산자 대신 캐스트 식을 사용하여 수행해야 합니다.
// cs_keyword_as.cs // The as operator. using System; class Class1 { } class Class2 { } class MainClass { static void Main() { object[] objArray = new object[6]; objArray[0] = new Class1(); objArray[1] = new Class2(); objArray[2] = "hello"; objArray[3] = 123; objArray[4] = 123.4; objArray[5] = null; for (int i = 0; i < objArray.Length; ++i) { string s = objArray[i] as string; Console.Write("{0}:", i); if (s != null) { Console.WriteLine("'" + s + "'"); } else { Console.WriteLine("not a string"); } } } }
출력
0:not a string 1:not a string 2:'hello' 3:not a string 4:not a string 5:not a string
'.Net > C#' 카테고리의 다른 글
[C#] Assemble.load (0) | 2013.01.15 |
---|---|
[Visual Studio 2010] C# 선언할때 공백 제거 문제 (0) | 2013.01.14 |
[C#] StackTrace (0) | 2013.01.08 |
[C#] DllImportAttribut 멤버 (0) | 2013.01.04 |
[C#] Visual C# 메소드를 비동기로 호출하는 방법 (0) | 2012.04.14 |
트랙백
댓글
글
특정 객체가 비교하는 객체의 객체 상속도에 맞는지 확인하는 연산자
말은 어려운데 실제 보면은 간단하다.
결국 검사할려는 인스턴스가 비교 객체의 자식 계통도에 포함되어 있으면 참이고
부모 계통도에 포함되어 있으면 거짓이다.
물론 상속계통도에 연관이 없는건 당연히 거짓이다.
말은 어려운데 실제 보면은 간단하다.
public class AClass { } public class BClass extends AClass { } AClass aIns = new AClass(); BClass bIns = new BClass(); // 참 if ( aIns instanceof AClass ) {} // 참 if ( bIns instanceof AClass ) {} // 거짓 if ( aIns instanceof BClass ) {} // 참 if ( bIns instanceof BClass ) {}
결국 검사할려는 인스턴스가 비교 객체의 자식 계통도에 포함되어 있으면 참이고
부모 계통도에 포함되어 있으면 거짓이다.
물론 상속계통도에 연관이 없는건 당연히 거짓이다.
'Java > Java' 카테고리의 다른 글
[Java] Java Dynamic method call (0) | 2012.02.09 |
---|---|
[Java] map sort (0) | 2012.02.02 |
[Java] 날짜표시 YYMMDDHH24MI (0) | 2011.11.21 |
[Java] Java Annotation (어노테이션) 관련자료 (0) | 2011.11.08 |
[Java] JDK와 JRE (0) | 2011.04.27 |
트랙백
댓글
글
C++로 프로그래밍을 할때도 C 캐스팅을 사용하고 있습니다.
이유는 C++ 캐스트 연산자 보다 타이핑 작성라인이 적어지고 익숙해서 편하기 때문이죠...
그렇지만 여러 자료나 많은 분들이 타입변환시 더 안정적인 C++ 캐스트 연산자를 사용하라고
조언하고 있습니다.
* static_cast<타입>(대상) : 논리적으로 변환 가능한 타입을 변환한다.
설명 : 포인터끼리 타입을 변환할 때는 상속 관계에 있는 포인터끼리만 변환이 허용되면 상속 관계가 아닌
포인터끼리는 변환을 거부한다.
* dynamic_cast<타입>(대상)
설명 : 부모 타입의 포인터를 자식 타입의 포인터로 다운 캐스팅할 때 무조건 변환을 허용하지 않고
안전하다고 판단될 때만 허용한다.
다운 캐스팅 할때 static_casts는 무조건 변환을 허가하지만 dynamic_cast는 실행 중에 타입을
점검하여 안전한 캐스팅만 허가한다.
따라서 이 연산자가 변환 가능성을 판한하기 위해서는 실행 중에 객체의 실제 타입을 판별할 수 있어야 한다.
* const_cast<타입>(대상)
설명 : 포인터의 상수성만 변경하고 싶을 때 사용한다.
* reinterpret_cast<타입>(대상)
설명 : 임이의 포인터 타입끼리 변환을 허용하는 상당히 위험한 캐스트 연산자.
이 연산자는 포인터 타입간의 변환이나 포인터와 수치형 데이터의 변환에만 사용하며 기본 타입들끼리의
변환에는 사용할 수 없다.
static_cast 상속 관계의 클래스 포인터 및 레퍼런스. 기본 타입. 타입 체크 안함.
dynamic_cast 상속 관계의 클래스 포인터 및 레퍼런스. 타입 체크. RTTI 기능 필요
const_cast const. volatile 등의 속성 변경
reinterpret_cast 포인터끼리, 포인터와 수치형간의 변환
참고 : 혼자 연구하는 C/C++ (김상형 저/와우북스)
'C/C++ > VC++ / MFC' 카테고리의 다른 글
MFC 디버깅시 MS MFC 소스코드를 쫓아서 디버깅할때는 Static Library... (0) | 2010.09.03 |
---|---|
[dumpbin] error LNK2019: unresolved external symbol "__declspec(dllimport) (0) | 2009.10.24 |
타입 변환 연산자 (0) | 2009.08.13 |
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (0) | 2008.11.12 |
template을 이용하여 C++을 작성할때는 꼭 .h에서 작성하자 (2) | 2008.10.15 |
트랙백
댓글
글
C++ 에서는 타입 변환 연산자라는 기능이 있습니다.
이걸 사용하면은 클래스가 일반 타입처럼 암시적 변환이 가능합니다.
아래는 예제 클래스 입니다.
차때고 포때고 간단하게 작성했습니다.
클래스의 목적은 int의 기능을 대신하는 클래스입니다.
class MyInt { private: int m_nNum; public: MyInt(int i) : m_nNum(i) {} operator int() const { return m_nNum; } MyInt& operator =(int i) { m_nNum = i; return *this; } };
보통 연산자 오버로딩 후에는 반환값이 있습니다.
MyInt& operator =(int i) { m_nNum = i; return *this; }
이런것 들 말이죠
그렇지만
연산자 오버로딩은 연산자가 함수 형태라고 해서
리턴값을 써주면 안됩니다.
operator int() const { return m_nNum; } // 컴파일됨
int operator int() const { return m_nNum; } // 에러
참고 : The C++ Programming Language
이런것 들 말이죠
그렇지만
연산자 오버로딩은 연산자가 함수 형태라고 해서
리턴값을 써주면 안됩니다.
operator int() const { return m_nNum; } // 컴파일됨
int operator int() const { return m_nNum; } // 에러
참고 : The C++ Programming Language
'C/C++ > VC++ / MFC' 카테고리의 다른 글
[dumpbin] error LNK2019: unresolved external symbol "__declspec(dllimport) (0) | 2009.10.24 |
---|---|
C++ 캐스트 연산자 (0) | 2009.09.15 |
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (0) | 2008.11.12 |
template을 이용하여 C++을 작성할때는 꼭 .h에서 작성하자 (2) | 2008.10.15 |
스택에 생성하는 CWnd를 상속받은 클래스에서는 PostNcDestroy에서 절대로 delete this를 하지마라 (2) | 2008.09.30 |
RECENT COMMENT