본문 바로가기

연산자 오버로딩4

항목7. &&, ||, 혹은 , 연산자는 오버로딩 대상이 절대로 아니다. 시작은 단축 평가 처리에 대해서 언급되어 있다. 복합적인 불린 표현식을 평가 할 때. 모든 조건을 다 보는것이 아니라. 특정 조건으로 인해 최종 결과 값이, 참 또는 거짓 이라고 판명이 났을 때. 남은 조건들을 검사하지 않고 넘어 가는 것을 말하는데. char* p; if( ( p != 0 ) && ( strlen(p) > 10 ) ) ... // 이 경우 p != 0 임이 확인 되면 strlen은 확인하지 않는다. // && 연산자 임으로 둘중 하나만 거짓이면 어차피 거짓이니까. if( ( index upperBound ) ) ... // 이 경우도 마찬가지다. // 만약 index가 lowerBound 보다 작다면, // upperBound 와의 연산.. 2011. 6. 30.
항목3. 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다. 제목이 뭐랄까 복잡하지만, 내용을 보니 그정도 까진 아닌거 같다. 다형성이라는 정의를 좀 쉽게 설명하면, "AAA 클래스를 상속받은 BBB 클래스가 있다. 그리고 AAA 클래스의 객체가 BBB 클래스를 접근하는 것이 가능하다. " 라고 표현 할 수 있겠는데... 아.. 써놓고 보니 쉽지 않은거 같기도 하고--;; 자세한 내용은 다형성에 대해서 "객체 포인터"라는 부분에서 정리를 예전에 해 두었으니 해깔리면 그걸 먼저 보는것이 나을 것 같다. 예제는 2가지정도 존재 하지만, 첫번째 예제만 봐도. "아!... 위험하네." 싶다. // 기본 클래스 AAA class AAA { public: int a; public: AAA() { a = 0; } // AAA 클래스의 연산자 오버로딩 friend ostream.. 2011. 4. 25.
연산자 오버로딩(operator overlonding)(2) 연산자 오버로딩에 대해 알아 보았다, 하지만 아직 연산자 오버로딩에 대해 완벽하게 알고 있는 것 같진 않다. void main() { Point p1(1, 2); // p1.operator(10); p1 + 10; p1.ShowPoint(); // 10.operator(p1); 10 + p1; // 과연 이게 우리가 원하는 오버로딩인가? p1.ShowPoint(); // 값 또한 바뀌지 않았다. } // 결과 // 11 12 // 11 12​ 그렇다면 저 구문에 대해서 실행을 해주고 싶다면 어떻게 해야 할까? 이런 부분에 대해서는 전역으로 연산자 오버로딩을 해 주어야 한다. class Point { ... public: friend void operator+( int val, Point& p ); } v.. 2010. 4. 4.
연산자 오버로딩(operator overloading)(1) 기존에 존재하는 +, ++, == 등의 연산자를 프로그래머가 중복 정의가 가능하다. operator+, operator++ 등으로 오버로딩이 가능한데, 멤버 함수내에 선언할 수도 있고, friend 키워드를 사용해서 전역으로 사용 할 수도 있지만, 멤버 함수에 선언해서 사용하는 것에 대해서 먼저 살펴 보자. 연산자 오버로딩의 사용 예, #include class Point { int x, y; public: Point( int _x = 0, int _y = 0 ) : x(_x), y(_y) {} void ShowPoint(){std::cout 2010. 4. 4.