본문 바로가기

C++

[SWING] C++ 06

과제 1

 

 

템플릿

 

같은 이름의 함수들을 반환값이나 인자값의 자료형만 바꾸어 하나의 함수명으로 다양한 타입의 처리를 하는 것을 '오버로딩'이라고 한다.

이름은 같지만 자료형이 다른 함수를 여러 개 만드는 것이라고 볼 수 있다.

[오버로딩을 사용했을 때]

int add (int x, int y){
   return x+y;}

double add (double x, double y){
   return x+y;}

int main(){
   int a=2, b=4;
   add(a,b);

   double c=1.5, d=1.6;
   add(c,d);
}

 

그러나 오버로딩은 필요한 자료형이 늘어날 때마다 동일한 코드를 중복 작성하면서 일일이 새로 만들어야 하므로 비효율적이라는 단점이 있다.

이럴 때 사용하기 좋은 것이 바로 '템플릿'이다.

 

템플릿은 함수나 클래스를 일반화하기 위한 도구이다.

함수 템플릿과 클래스 템플릿으로 나뉜다.

 

템플릿은 아래와 같은 방법으로 선언한다.

T는 사용자가 운하는 이름으로 제네릭 타입을 의미한다.

 

template <class T>

or

template <typename T>  : 권장된다.

 

[템플릿을 사용했을 때]

template <typename T>
T add (T x, T y){
   return x+y;
}

 

템플릿의 제네릭 타입 T에 자료형을 지정하고 구체화된 함수의 소스 코드를 생성하는 과정을 '구체화'라고 말한다.

위의 템플릿을 구체화하면 다음과 같다.

 

int add (int x, int y){
   return x+y;}

int main(){
   int a=2, b=4;
   add(a,b);
}

 

[실습]

#include <iostream>
using namespace std;

template <typename T>
void myswap(T& a, T& b) {
T tmp; tmp = a; a = b; b = tmp; }

int main() {
int a = 1, b = 5;
myswap(a, b);
cout << "a=" << a << ",b=" << b << endl; }

 

 

 

과제 2

 

https://github.com/coderrim/SWING/commit/4533d7fece8f1e2c242da29e7e07db39548e167c

 

Create SWING C++ 06 -2 · coderrim/SWING@4533d7f

coderrim committed Oct 21, 2023

github.com

 

'C++' 카테고리의 다른 글

[SWING] C++ 05  (0) 2022.05.23
[SWING] C++ 04  (0) 2022.05.14
[SWING] C++ 03  (0) 2022.05.06
[SWING] C++ 02  (0) 2022.05.01
[SWING] C++ 01  (0) 2022.03.27