[C++] 클래스 템플릿

KWANHO PARK·2025년 4월 18일

CPP

목록 보기
16/24
/*
	클래스 템플릿
*/
#include <iostream>
//using namespace std;

template <typename T>
class CTemplate {
private:
	T data;
public:
	CTemplate(T d) {
		data = d;
	}
	T getData() {
		return data;
	}
};
int main()
{
	CTemplate<int> obj(100);
	std::cout << "data: " << obj.getData() << std::endl;

	CTemplate<std::string> obj2("클래스 템플릿 테스트");
	std::cout << "data: " << obj2.getData() << std::endl;

	return 0;
}

#include <iostream>

template <typename T>
class CTest {
private:
	T num;
public:
	CTest(T n) : num(n) {

	}

	T getData() {
		return num;
	}
};
template <>					// 클래스 템플릿의 특수화
class CTest<char> {
private:
	char data;
public:
	CTest(char d) : data(d) {

	}
	char getData() {
		return data;
	}
};
int main()
{
	CTest<int> obj(10);		// 클래스 템플릿은 반드시 인스턴스 생성 시 typename을 작성해야 함
	std::cout << obj.getData() << std::endl;
	CTest<char> obj2('a');
	std::cout << obj2.getData() << std::endl;
	return 0;
}

/*
	템플릿 매개변수
*/
#include <iostream>

template <typename T, int sz>
class CTest {
private:
	T arr[sz];
public:
	T& operator[](int idx) {		// 쓰기 가능 인덱스
		if (idx < 0 || idx >= sz) {
			std::cout << "Error" << std::endl;
			exit(1);
		}
		return arr[idx];
	}
	void getData() {
		for (int i = 0; i < sz; i++) {
			std::cout << arr[i] << std::endl;
		}
	}
};
int main()
{
	CTest<int, 5> obj;
	obj.operator[](0) = 10;
	obj[1] = 20;
	obj[2] = 30;
	obj[3] = 40;
	obj[4] = 50;

	obj.getData();
	std::cout << obj[0] << std::endl;

	return 0;
}

0개의 댓글