본문 바로가기

프로그래밍162

연산자 오버로딩(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.
스트레티지(strategy) 패턴 기본적인 구조는 최상위 클래스를 상속받아 그 클래스들에 기능을 추가한다. 라고 보는게 맞을듯. 어떤 상황에 좋은가? 서로 행위만 다를 뿐 밀접한 연관 관계를 가지는 여러 클래스들에 대해 필요한 시점에 어느 한 행위를 수행하는 클래스를 골라 사용하고자 할 때 유용하다. 저장 공간 사용 효율이나 실행 시간 효율 등의 측면에서 다양한 형태의 알고리즘(기능)이 존재해서 상황에 따라 최적의 알고리즘(기능)을 선택해서 사용하도록 할 때 유용하다. 어떤 알고리즘(기능)이 Client가 알아서는 안될 데이터를 사용하거나 알고리즘(기능)에 종속된 복잡한 자료구조(속성)를 사용할 때 유용하다. 이 경우 Strategy 패턴은 Client에게 알고리즘(기능)이 사용하는 데이터나 자료구조(속성)를 숨겨주는 역활을 한다. 어떤.. 2010. 4. 3.
가상 복사 생성자 상황에 따라서 새로 생성한 이 후 그 내용을 복사해 주고 싶다면 어떻게 할까? 가상 복사 생성자, 어디서 뭘 설명해야 할지 모르겠지만, 객체 포인터 배열 A와 객체 포인터 배열 B가 존재 한다고 했을 때 A에 값을 삽입 후 B = A; 를 해주었을 때 B에 A의 내용이 그대로 복사 되길 원한다고 하자. 그때 사용한다. 나머진 소스 코드로 ㅠㅠ #include class Mammal { protected: int itsAge; public: Mammal() : itsAge(1) { std::cout 2010. 4. 3.
virtual(가상) virtual 이라는 키워드는 클래스에서 사용을 하게 되는데 존재 하지만 존재 하지 않는? 소스로 설명하겠다. #include class AA { public: // 순수 가상 함수 virtual void ShowData() = 0; virtual ~AA() { std::cout 2010. 4. 3.
함수 오버라이딩(overriding) 오버로딩과 비슷한 그 이름 오버라이딩, 하지만 엄연히 틀리다. 한글로 표현하자면, 음, 오버로딩 = 함수 중복 정의? 오버라이딩 = 함수 재 정의? 정도로 표현 할 수 있을까 모르겠다. #include class AA { public: void ShowData(){std::cout 2010. 4. 3.