과제 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 |