본문 바로가기
Quality control (Univ. Study)/Data structure

자료구조론(4)

by 생각하는 이상훈 2022. 10. 3.
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