728x90
Template
함수 template, 클래스 template이 존재한다. 함수나 클래스를 개별적으로 작성하지 않아도 template을 통해 원하는 자료형으로 상황에 맞추어 함수나 클래스를 이용할 수 있도록 한다.
#include <iostream>
using std::endl;
using std::cout;
template <typename T>
T myAdd(T a, T b)
{
return a+b;
}
int main(void)
{
cout<<myAdd(1,2)<<endl;
cout<<myAdd(3.14, 1.5)<<endl;
return 0;
}
함수 템플릿 예시
#include <iostream>
using namespace std;
template <typename T>
class Data
{
private:
T data_;
public:
Data(T dt);
T get_data();
};
int main(void)
{
Data<string> str_data("C++ 수업");
Data<int> int_data(12);
cout << "str_data : " << str_data.get_data() << endl;
cout << "int_data : " << int_data.get_data() << endl;
return 0;
}
template <typename T>
Data<T>::Data(T dt)
{
data_ = dt;
}
template <typename T>
T Data<T>::get_data()
{
return data_;
}
클래스 템플릿 예시
Data<string> str_data("C++ 수업"); 코드에서 <string>이 필요한 이유는 객체 생성 과정을 보면 알 수 있다.
우선 메모리 공간을 할당하고 그때 Base클래스 공간도 함께 할당한다. 그 후에 생성자를 호출하게 되는데 결국 생성자 호출전에 메모리 공간이 할당이 되어야 하기 때문에 자료형의 크기를 알아야하므로 <string>과 같이 자료형을 알려주는 것이다.
Template specialization
템플릿 함수를 사용하지만, 특정 매개변수에 대해서는 별도처리를 하고 싶은 경우 specialization 개념을 이용한다.
template <typename T> //함수 템플릿 정의
int mySizeOf(T a)
{
return sizeof(a);
}
template<> //template specialization
int mySizeOf (char* s) //parameter가 char*인 경우에는 이함수를 호출하라는 의미
{
return strlen(s);
}
Exception handling
C++에서는 try & catch문과 throw문을 이용하여 다음과 같이 예외처리를 할 수 있다.
int main(void)
{
int a,b;
cout<<"두개의 정수 입력:";
cin>>a>>b;
try{
if(b==0)
throw b;
cout<<"a/b = "<<a/b<<endl;
}
catch(int ex){
cout<<"입력된 값 = "<<ex<<endl;
cout<<"입력오류! 다시 실행 하세요."<<endl;
}
return 0;
}
728x90
'Quality control (Univ. Study) > Data structure' 카테고리의 다른 글
ArrayStack(1) (0) | 2022.11.18 |
---|---|
자료구조론(5) (1) | 2022.10.06 |
자료구조론(3) (0) | 2022.09.26 |
자료구조론(2) (0) | 2022.09.12 |
자료구조론 기초(1) (0) | 2022.09.04 |