#include<iostream>
using namespace std;
int max(int x, int y)
{
//if (x > y) return x;
//else return y;
return (x > y) ? x : y;
}
double max(double x, double y)
{
return (x > y) ? x : y;
}
char max(char x, char y)
{
return (x > y) ? x : y;
}
void main()
{
cout << max(10, 20) << endl;
}
⇒ 중복되는 코드가 많음.
템플릿을 사용하면 하나의 함수로 작성할 수 있다.
소스코드의 길이를 현저히 줄일 수 있다.
데이터형을 보장하는 유연성이 있다.
template <class T> T max(T x, T y)
{
return (x < y) ? x : y;
}
template <class 식별자[매개변수]> 함수명 또는 클래스명
{
}
template <class T> class My Class
{
...
}
template <class T> void MyFunc(T& a, T& b)
{
...
}
템플릿의 참조 방법
템플릿 클래스명
<데이터형, 매개변수>
객체명
클래스 템플릿 참조
MyClass <int> mytest;
MyClass <char, 6> mytest;
MyFunc(5, 10);
MyFunc("string1", "string2");
CStack<int> test(10);
클래스 템플릿의 객체가 생성될 때까지는 클래스 템플릿에 대한 어떠한 코드도 생성되지 않는다.
멤버함수도 명확하게 호출될 때까지는 생성되지 않는다.
클래스 템플릿이 정의되었으므로 객체를 생성할 수 있다.
CParam<char, 10> pi;
template<class T1, class T2> void print(T1 a, T2 b)
{
cout << a << "," << n << endl;
}
print('K', 10);
print(2, 3.5);
print('A', 'B');
다른 타입 및 같은 타입 모두 가능하다.
#include<iostream>
using namespace std;
template <class T> T Max(T x, T y)
{
return (x > y) ? x : y;
}
template <class T1, class T2> void print(T1 x, T2 y)
{
cout << x << "," << y << endl;
}
void main()
{
//cout << max(10, 20) << endl;
print('K', 10);
print('A', 'B');
}
C++ 예외 처리는 언어 차원에서 지원하는 기법.
예외 처리 키워드는 크게 3가지가 있다.
종류 | 내용 |
---|---|
try | 예외 가능성이 있는 코드 영역을 처리한다. 이 블록에서 예외가 발생하면 throw 명령으로 예외를 넘긴다. |
catch | 사전적 의미로 '잡는다'는 의미로, 예외 발생 시 예외를 잡아서 처리한다. |
throw | 사전적 의미로 '던진다'는 의미로, 이 키워드를 만나면 예외를 처리하는 구문으로 던진다. |
try
{
// 예외 가능성이 있는 코드 영역
if(예외 조건) throw 예외 객체
}
catch(예외 객체)
{
// 예외 발생에 처리할 영역
}
#include<iostream>
using namespace std;
void main()
{
int a, b;
cout << "나누어질 수 입력 : ";
cin >> a;
cout << "나누는 수 입력 : ";
cin >> b;
try
{
if (a < 0) throw "나누어질 수가 음수입니다.";
if (b == 0) throw b;
cout << "나누기 결과 " << a / b << endl;
}
catch (int e)
{
cout << "나누는 수에 " << e << "이 입력되었습니다." << endl;
}
catch (const char* msg)
{
cout << msg << endl;
}
}
#include<iostream>
using namespace std;
void divide(int argA, int argB)
{
if (argB == 0) throw argB;
cout << "나누기 결과 " << argA / argB << endl;
}
void main()
{
int a, b;
cout << "나누어질 수 입력 : ";
cin >> a;
cout << "나누는 수 입력 : ";
cin >> b;
try
{
divide(a, b);
}
catch (int e)
{
cout << "나누는 수에 " << e << "이 입력되었습니다." << endl;
}
catch (const char* msg)
{
cout << msg << endl;
}
}