미누에요

[C++] 윤성우의 열혈 C++ 13-2 클래스 템플릿의 정의 문제풀이 본문

C++

[C++] 윤성우의 열혈 C++ 13-2 클래스 템플릿의 정의 문제풀이

미누라니까요 2024. 7. 23. 14:46
728x90
반응형
SMALL

문제

 

스마트 포인터

class SmartPtr{
private:
    Point *posptr;
public:
    SmartPtr(Point * ptr):posptr(ptr){}
    Point& operator*() const{
        return *posptr;
    }
    Point* operator->() const{
        return posptr;
    }
    ~SmartPtr(){
        delete posptr;
    }
};

 

이 스마트 포인터를 템플릿으로 정의하여, 어떠한 클래스의 객체도 참조할 수 있는 포인터가 되게 하자.

그리고 아래의 Point클래스와 main 함수를 기반으로 예제를 완성해보자.

 

class SmartPtr
{
private:
    Point *posptr;
public:
    SmartPtr(Point * ptr):posptr(ptr){}
    Point& operator*() const{
        return *posptr;
    }
    Point* operator->() const{
        return posptr;
    }
    ~SmartPtr(){
        delete posptr;
    }
};


int main(void){
    SmartPtr<Point> sptr1(new Point(1, 2));
    SmartPtr<Point> sptr2(new Point(3, 4));
    sptr1->ShowPosition();
    sptr2->ShowPosition();

    sptr1->SetPos(10, 20);
    sptr2->SetPos(30, 40);
    sptr1->ShowPosition();
    sptr2->ShowPosition();
    return 0;
}

 

 

 

정답

#include<iostream>
using namespace std;


class Point{
private:
    int xpos, ypos;
public:
    Point(int x=0, int y=0):xpos(x),ypos(y){}
    void SetPos(int x, int y){
        xpos = x;
        ypos = y;
    }
    void ShowPosition() const{
        cout << '[' << xpos << ", " << ypos << ']' << endl;
    }
};

template <class T>
class SmartPtr
{
private:
    T *posptr;
public:
    SmartPtr(T * ptr):posptr(ptr){}
    T& operator*() const{
        return *posptr;
    }
    T* operator->() const{
        return posptr;
    }
    ~SmartPtr(){
        delete posptr;
    }
};


int main(void){
    SmartPtr<Point> sptr1(new Point(1, 2));
    SmartPtr<Point> sptr2(new Point(3, 4));
    sptr1->ShowPosition();
    sptr2->ShowPosition();

    sptr1->SetPos(10, 20);
    sptr2->SetPos(30, 40);
    sptr1->ShowPosition();
    sptr2->ShowPosition();
    return 0;
}

 

 

실행 결과

728x90
반응형
LIST