목록C++ 9
LuvSea
점의 좌표를 저장하기 위하여 Point 클래스를 만들어 int형 변수를 사용한다고 하자. 그런데 경우에 따라서 점의 좌표를 정수형이 아닌 실수형으로 저장해야 할 필요도 있다. 이럴 경우 데이터 형만 Double형으로 바꿔서 똑 같은 클래스를 만들면 된다. 이렇게 데이터 형만 바뀌고 형태가 같은 클래스를 여러 가지로 찍어내고 싶을 경우 템플릿을 사용하면 된다. class Point { public: // 멤버 함수 void SetPosition(int nX, int nY); void Move(int nX, int nY); virtual void Show(); protected: // 멤버 변수 int m_nX, m_nY; }; Point라는 클래스가 위와 같을 때 int형 데이터 타입을 임의의 데이터 타입..
int a; a = 1 + 2; 위의 소스를 모르는 사람은 없을 것이다. 하지만 다음과 같은 소스가 가능할까? MyClass obj1; MyClass obj2; obj1 = obj1 + obj2; 객체를 객체끼리 더해서 대입한다...라는 뜻인거 같은데 가능해보이지는 않는다. 물론 가능하지 않다. 하지만 C++에서는 가능하도록 만들 수 있다. 바로 연산자 오버로딩을 이용해서 연산자를 재정의하면 위의 코드가 가능해지도록 만들 수 있다. 더하기 연산자를 다시 한번 자세히 살펴보도록 하자. a = 1 + 2; 라는 코드가 있다고 한다면, 이 코드를 자세히 보면 연산자 우선 순위에 의해서 +가 먼저 실행되고, =가 그 뒤에 실행되는데, + 를 보면 + 를 기준으로 앞 뒤의 정수들 더해서 정수를 만들어 준다는 것을..
임시 객체는 바로 생성되었다가 사라지는 객체를 말하는데, 몇가지 용도로 쓰인다. 다음 소스를 보자. #include class points { public: int x; int y; points(int x, int y) { this->x = x; this->y = y; } }; void Draw(points P) { //점을 찍는다. }; int main() { points P(2, 3); Draw(P); //.... //.... return 0; } #include class points { public: int x; int y; points(int x, int y) { this->x = x; this->y = y; } }; void Draw(points P) { //점을 찍는다. }; int main..
먼저 이 글은 포인터에 대한 이해를 필요로 한다. 포인터에 대한 기본지식이 있다고 가정하고 글을 쓰도록 하겠다. int GetAreaEx( int x, int y ) { return x * y; } 우선 이런 간단한 함수가 있다. 우리는 이 함수를 호출하기 위해 명시적으로 GetAreaEx( x, y ); 이런식으로 기술해야 한다. 하지만 예를 들어 GetArea2, GetArea3, ..., GetAreaN 이런식으로 비슷한 함수가 존재하고 이를 상황에따라 다르게 호출해야 한다면 이 방식으로는 관리도 어려울 뿐더러 효율성도 떨어지고 코드량도 많이질 것이다. 또한 외부(스크립트 등)에서 어떤 특정한 함수를 호출하려 할때도 방법이 묘연할 것이다. int (*GetArea)( int, i..