- C++ 스터디 4주차 템플릿
템플릿에는 크게 2가지가 있는데 함수 템플릿/클래스 템플릿이 있습니다.
함수 템플릿의 경우 함수위에 template<typename T> 를 명시해주고
함수내에 변수 타입자리에 T를 기재해서 T가 상황에 맞는 변수형으로 인식한다.
EX)
template <typename T>
T getArraySum(T arr[], int n){
T sum = T();
for (int i=0; i<n; i++){
sum += arr[i];
}
return sum;
}
위와 같이 임의의 타입 T 형 배열을 받아서 배열내 값들을 더해 최종 sum을 반환해주는 함수를 작성하였다.
int main(){
int iarr[4]={1,2,3,4};
float farr[4]={3.1 ,3.2, 1.3 ,2.4};
string sarr[2]={"hello" , "world"};
cout << getArraySum(iarr , 4) <<endl;
출력값 : 10
클래스 템플릿은 아래와 같습니다.
클래스 선언위에 함수와 같이 template<typename T> 를 명시해주고 내부 변수선언에 타입을 T로 정의합니다.
EX)
template<typename T>
class Vector {
private:
T x;
T y;
public :
Vector() : x(0),y(0){};
Vector(T x, T y) : x(x),y(y){}
T GetX(){
return x;
}
T GetY(){
return y;
}
Vector operator+=(Vector v){
x += v.GetX();
y += v.GetY();
return *this;
}
Vector operator-=(Vector v){
x -= v.GetX();
y -= v.GetY();
return *this;
}
Vector operator+(Vector v){
return Vector(x + v.GetX(),y + v.GetY());
}
Vector operator-(Vector v){
return Vector(x - v.GetX(),y - v.GetY());
}
};
int main(){
Vector<int> v1(1,2);
Vector<float> v2(1.1,2.2);
Vector<float> v3(3.1,5.3);
cout<< v2.GetX() <<", " << v2.GetY()<<endl;
}
출력값 : 1.1 ,2.2
여기서 주의할 점은 template class 를 이용해 해당 객체를 만들고자하면 변수타입을 명시해주어야 합니다.
사실 임의로 알수는 있겠지만, 치명적인 에러를 방지하고자 컴파일 에러가 나오게 됩니다.
또한 template <class T> 형태로도 사용 가능합니다.
'개발일지' 카테고리의 다른 글
안드로이드 프로그래밍 - progress bar (0) | 2022.11.08 |
---|---|
안드로이드 프로그래밍 - Toast 메시지, Snackbar (0) | 2022.11.08 |
안드로이드 프로그래밍 - 화면전환 2 (0) | 2022.11.07 |
안드로이드 프로그래밍 - 화면전환(가로,세로) (0) | 2022.11.07 |
안드로이드 프로그래밍 - TouchEvent, KeyEvent (0) | 2022.11.06 |