미누에요
[C++] 윤성우의 열혈 C++ 13-2 클래스 템플릿의 정의 문제풀이 본문
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
'C++' 카테고리의 다른 글
[C++] 템플릿의 부분 특수화 (0) | 2024.07.24 |
---|---|
[C++] 템플릿(Template), 템플릿 특수화(Specialization) (1) | 2024.07.24 |
[C++] 윤성우의 열혈 C++ 13-1 함수 템플릿의 정의 문제풀이 (0) | 2024.07.23 |
[C++] 포인터 연산자 오버로딩, operator*, operator-> (2) | 2024.07.23 |
[C++] operator new, operator new[] (1) | 2024.07.23 |