컴퓨터 과학 & 영상처리 관련/C / C++

템플릿 , 연산자 오버로딩 등

꺄뜨르 2012. 7. 10. 17:00

일부분을 변경하여 몇 번이라도 사용할 수 있는 문서 포맷이나 데이터를 말함


템플릿 함수는 호출하는 족에서 지정한 인수의 형에 맞춰 함수 내에서 사용하는 변수의 형을 바꿀 수 있다.


c언어의 경우 같은 일ㅇ르 하는 함수라도 인수의 형이 다를 경우 별개로 함수로 만들어야 했다.(아니면 #define으로 사용)

그러나 #define 매크로는 한 줄로 기술해야 하기 때문에, 기술할 내용이 여러 행에 걸칠 경우엔 \ 기호를 사용하여 행을 연결해 주어야 했으므로 조금 불편했다.


#define Swap(T, a, b) \

     { T n = a ; \

           a = b ; \

           b = n; }


int main(){

   int aa = 1, bb = 2;

   SwapT(int ,aa,bb);


//우어와 신박하네


암튼

c++의 경우 템플릿 함수의 기능을 사용함으로서, #define 매크로를 사용하지 않아도 복수에 형에 대흥하는 함수를 작성할 수 있다. 

(연산자의 처리내용을 정하자...여기서 연산자 오버로딩 하나?)



템플릿 함수

template <class T>   //T는 템플릿 인수 T 부분이 int, double 등으로 치환됨

T GetMax(T a, T b)

{

   T buf;   //함수의 인수, 반환값에 템플릿 인수를 사용

}


사용법

int n1 = 100, n2 = 200, ret;

ret = GetMax(n1,n2);   //여기서 템플릿 인수가 int로 치환됨


오오..이 책으로 공부하니깐 쉽게 이해가 되네..이런 템플릿을 이용하면 여러 타입에 적용될 수 있는 함수가 만들어지는구먼



템플릿 클래스

template <class T>

class Rectangle{

public:

   T GetRight() {     //아직 형이 확정되지 않았기 때문에, 임시로 T 형으로 만듬

     return letf + width;

   }

   ...

   T left, top,width,height;

};


Rectangle<int> rect;

Rectangle<double> rect;



템플릿 인수가 2개 이상 있을 경우, 복수로 지정 가능

template<class T1, class T2>

class Rectangle{

};

Rectangle<int, char> rect;



표준 템플릿 라이브러리(STL : standard template library)

배열 vector 클래스

리스트 list 클래스

큐 queue 클래스

스택 stack 클래스


vector 클래스의 예


 배열로 사용할 수 있는 vector 클래스는 메모리가 부족한 경우에 자동적으로 메모리를 확보함. 그 때문에 일반 배열과는 달리 사이즈에 신경을 쓰지 않아도 됩니다.


#include <vector>     //vector 클래스를 사용하는데 필요

#include <iostream>


using namespace std;


int main()

{

   vector<int> v1;   //int 형을 저장하는 vector 객체 생성

   v1.push_back(10);    //배열 마지막에 데이타 - 10을 추가

   v1.push_back(11);


   cout<<"요소의 개수 : " << (int)v1.size() << endl;   //요소의 갯수를 출력

   cout<<"v1[0] = " << v1[0] << endl;    //일반 배열과 동일하게 접근할 수 있다. 

   cout<<"v1[1] = "<<v1[1] << endl;

   return 0;

}



STL(2)...반복자(iterator)

STL 각 컨테이너 오브젝트에 있는 iterator라는 클래스의 오브젝트를 사용하면, 컨테이너 내부의 데이터에 동일한 방법으로 접근할 수 있습니다. iterator 오브젝트는 컨테이너 오브젝트 내부의 한 요소를 가리킵니다. 





연산자 



대입 연산자의 오버로딩



캐스트 연산자



assert 매크로 기술