템플릿에 대해 배웠다.
일단 함수 오버로딩에 대해 배워야 템플릿 사용을 이해할 수 있다.
- 함수 오버로딩
- C++에서는 동일한 이름의 함수를 여러 개 정의 할 수 있다.
- C++에서는 함수 이름과 매개변수 타입 정보를 함께 사용해 구분하기 때문.
- 함수 이름 구분을 위해 내부적으로 고유한 이름을 부여하는 것을 네임 맹글링(Name Mangling)이라고 한다.
- 함수의 반환형만으로는 오버로딩이 성립하지 않는다.
- 함수 오버로딩을 적용하려면, 이름이 같아도 각 함수가 명확이 구분되어야 함.
#include <iostream>
using namespace std;
void print(int i)
{
cout << "정수: " << i << endl;
}
void print(double d)
{
cout << "실수: " << d << endl;
}
void print(string s)
{
cout << "문자열: " << s << endl;
}
int main() {
print(10); // 정수 버전 호출
print(3.14); // 실수 버전 호출
print("Hello"); // 문자열 버전 호출
return 0;
}
위는 변수 타입만 다른 함수이다.
- 함수 오버로딩이 되려면, 호출되는 함수가 분명해야 함
- 애매모호한 경우로 오류가 발생하는 경우
- 타입 변환이 가능한 매개변수로 인해 두 개 이상의 오버로딩된 함수가 호출 후보가 되는 경우
- 디폴트 매개변수로 인해 함수 호출 형태가 중복되는 경우
- 매개변수의 타입만 포인터와 배열로 다른 겨우
- 함수의 반환 타입만 다른 경우
이제 템플릿에 대해 알아보자- 템플릿
- 템플릿은 템플릿 타입에 관계없이 일반화된 코드를 작성하기 위한 문법이다.
- 정의 :
templat <typename T>- 이 의미는 어떤 타입이 올지 모르겠으나, 그 타입을
T라고 부르겠다는 의미.- 이후에는 일반화하려는 타입 자리에 실제 타입 대신
T를 사용하면 된다.
#include <iostream>
using namespace std;
template <typename T>
T add(T a, T b)
{
return a + b;
}
int main()
{
cout << add(3, 4) << endl; // 정수
cout << add(2.5, 3.1) << endl; // 실수
return 0;
}
위는 템플릿 사용 예시 이다.
- 클래스를 템플릿으로 만들 수 있고 배열에 원소를 추가하고 삭제하는 기능을 가진 클래스를 정의할 수 있다.
#include <iostream>
using namespace std;
template <typename T, int SIZE>
class MyArray
{
private:
T data[SIZE];
public:
void set(int index, T value)
{
if (index >= 0 && index < SIZE)
{
data[index] = value;
} else
{
cout << "인덱스 범위 초과!" << endl;
}
}
T get(int index) const
{
if (index >= 0 && index < SIZE)
{
return data[index];
} else {
cout << "인덱스 범위 초과!" << endl;
return T(); // 기본값 반환
}
}
void printAll() const
{
for (int i = 0; i < SIZE; ++i)
{
cout << data[i] << " ";
}
cout << endl;
}
};
int main() {
MyArray<int, 5> intArray;
for (int i = 0; i < 5; ++i)
{
intArray.set(i, i * 10);
}
intArray.printAll(); // 출력: 0 10 20 30 40
MyArray<string, 3> strArray;
strArray.set(0, "Hello");
strArray.set(1, "C++");
strArray.set(2, "World");
strArray.printAll(); // 출력: Hello C++ World
return 0;
}
위는 템플릿을 이용한 배열 클래스이다.
코드를 읽는(해독)하는 것이 중요한 것 같다. 읽을 줄 알아야 쓸 수 있을 것 같다.
새로운 유형의 코딩 문제를 볼 때, 낯선 함수, 키워드가 나오면 당황하는 것 같다. 읽고 해석하는 연습을 지속적으로 해야겠다.
코드 디버깅 해보기
whatch, cout등, 5번째 과제 수행(언리얼에터 액터 배치 후 비주얼 스튜디오로 코드 작성 후 디버깅 해보기)