[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