[C++] 템플릿(Template) 2: 클래스 템플릿
클래스 템플릿
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
클래스 템플릿
#include <iostream> using namespace std; class RandomBox{ public: int GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: int _data[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox rb2; for (int i = 0; i < 10; i++) { rb2._data[i] = i; } int value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

클래스 템플릿: 예제1
#include <iostream> using namespace std; template<typename T> class RandomBox{ public: T GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: T _data[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox<int> rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox<float> rb2; for (int i = 0; i < 10; i++) { rb2._data[i] = i + 0.5f; } float value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

#include <iostream> using namespace std; template<typename T, int SIZE> class RandomBox{ public: T GetRandomData() { int idx = rand() % SIZE; return _data[idx]; } public: T _data[SIZE]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox<int, 10> rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox<int, 20> rb2; for (int i = 0; i < 20; i++) { rb2._data[i] = i + 0.5f; } int value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

템플릿 특수화
#include <iostream> using namespace std; template<typename T, int SIZE> class RandomBox{ public: T GetRandomData() { int idx = rand() % SIZE; return _data[idx]; } public: T _data[SIZE]; }; // 템플릿 특수화 template<int SIZE> class RandomBox<double, SIZE){ public: double GetRandomData() { cout << "RandomBox Double" << endl; int idx = rand() % SIZE; return _data[idx]; } public: double _data[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox<int, 10> rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox<double, 20> rb2; for (int i = 0; i < 20; i++) { rb2._data[i] = i + 0.5f; } double value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

클래스 템플릿: 예제 2
#include <iostream> using namespace std; template<typename T, typename U> class TemplateClass { private: T Num1; U Num2; public: TemplateClass() { Num1 = 0; Num2 = 0; }; TemplateClass(T num1, U num2) { Num1 = num1; Num2 = num2; } void Print() const { cout << Num1 << " : " << Num2 << endl; } T Add(const T num1, const U num2) { return num1 + num2; } // 클래스 안에 템플릿 함수를 선언합니다. // 해당 형식은 클래스를 선언할 때 클래스의 T 형식으로 // 전환되지 않습니다. template<typename T> T Sub(const T num1, const T num2) { return num1 - num2; } }; int main() { TemplateClass<int, float> sample1(10, 20.14f); sample1.Print(); cout << sample1.Add(30, 40) << endl; cout << sample1.Sub<double>(1.5, 0.5) << endl; cout << sample1.Sub<int>(30, 10) << endl; return 0; }

'⭐ Programming > C++' 카테고리의 다른 글
[C++]L-value와 R-value, R-value reference (0) | 2022.04.24 |
---|---|
[C++] 콜백 함수 (Callback function) (0) | 2022.04.17 |
[C++] 템플릿(Template) 1: 함수 템플릿 (0) | 2022.04.16 |
[C++] 함수 객체 (0) | 2022.04.16 |
[C++] 함수 포인터 2 (0) | 2022.04.16 |
댓글
이 글 공유하기
다른 글
-
[C++]L-value와 R-value, R-value reference
[C++]L-value와 R-value, R-value reference
2022.04.24 -
[C++] 콜백 함수 (Callback function)
[C++] 콜백 함수 (Callback function)
2022.04.17 -
[C++] 템플릿(Template) 1: 함수 템플릿
[C++] 템플릿(Template) 1: 함수 템플릿
2022.04.16 -
[C++] 함수 객체
[C++] 함수 객체
2022.04.16
댓글을 사용할 수 없습니다.