본문 바로가기

전체 글93

[ C++ ] 클래스 템플릿 ( Class Template ) 앞서 포스팅에 함수 템플릿을 설명하였다. 클래스 템플릿( Class Template )은 함수 템플릿처럼 클래스를 만들어 내는 도구이다. 그럼 점에 대한 클래스 템플릿을 만들어보자. 컴파일러는 24행의 Dot dot1(1, 2); 를 보고 Dot 템플릿 클래스를 생성하고, 25행의 Dot dot2(1.5, 2.5); 를 보고 Dot 템플릿 클래스를 생성한다. * 여기서 주의해야 할 점은, 템플릿 클래스는 템플릿 함수와 다르게 객체를 생성할 때 , 과 같은 자료형 정보가 반드시 표기되어야한다. 클래스 템플릿도 멤버함수를 클래스 외부에 정의하는 것이 가능하다. 위의 코드를 조금 수정해보겠다. 점의 x, y 좌표 값을 더하는 Adder 함수를 추가하였다. 멤버함수를 클래스 외부에 정의할 때도 template를.. 2019. 11. 30.
[ C++ ] 함수 템플릿의 특수화(Specialization) 함수 템플릿의 특수화(Specialization)는 특정 자료형에 대해서만 다른 템플릿 함수를 생성할 수 있도록 커스텀해주는 것이다. 지난 템플릿 포스팅에 사용하였던 Adder 함수 템플릿을 기반으로 예제를 보겠다. template const char * Adder(const char * chr1, const char * chr2) { cout 2019. 11. 29.
[ C++ ] 둘 이상의 자료형(Type)에 대한 템플릿 선언 이렇게 typename ( 혹은 class )를 템플릿에 선언할 때 원하는 만큼 기입한 후에 문자( T1, T2, T3.. )를 활용하면 된다. 문자는 개발자 마음대로 편하게 사용한다. template 2019. 11. 29.
[ C++ ] 함수 템플릿(Function Template)과 템플릿 함수(Template Function) Template. 형판, 형틀 어떤 특정한 모양을 만들기 위해 만들어진 틀을 말한다. 즉, 함수 템플릿(Function Template)은 함수를 만드는 도구를 의미한다. 함수를 만드는 도구는 무엇으로 이뤄져서 만들지는 정하지는 않는다. 그래서 함수 템플릿이 만들어 내는 함수의 자료형도 결정되어 있지 않는다. 예를 보자. int Adder(int n1, int n2) { return n1 + n2; } 위의 함수의 기능은 덧셈이고, 대상 자료형(파라미터와 리턴 값)은 int형 데이터이다. 이러한 함수를 만들어 낼 수 있는 템플릿(Template)은 다음과 같다. T Adder(T n1, T n2) { return n1 + n2; } 위의 함수의 기능은 덧셈이고, 대상 자료형(파라미터와 리턴 값)은 결정되.. 2019. 11. 29.
[ C++ ] String 클래스 String 클래스 선언 및 정의해보기. 구현할 사항은 1. 문자열을 인자로 전달받는 생성자의 정의 2. 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의 3. 결합된 문자열로 초기화된 객체를 반환하는 +연산자의 오버 로딩 4. 문자열을 덧붙이는 += 연산자의 오버 로딩 5. 값 비교를 진행하는 == 연산자의 오버 로딩 6. 콘솔 입출력이 가능하도록 연산자의 오버 로딩 #include #include using namespace std; class String { private: int len; char * str; public: String(); String(const char * _str); String(const String& _str); ~String(); String& operator= .. 2019. 11. 28.
[ C++ ] 임시객체로의 자동 형 변환과 형 변환 연산자(Conversion Operator) C++에서는 객체 간의 대입 연산을 허용한다. ( 객체의 자료형이 일치할 때만 대입 연산이 가능하다. ) 그럼, 객체와 정수간의 대입 연산도 가능할까? 가능하다. 그럼, 어떤 과정을 통해서 위의 결과가 나오는지 자세히 살펴보겠다. 자세히 보면 Num 생성자가 두번 일어난 것을 확인할 수 있다. 먼저 객체 n이 생성할 때 한번, Num n; 그리고 n = 20을 연산할 때 한번 일어난다. n = 20; 즉, 연산을 위해서 임시 객체가 생성된 것을 확인할 수 있는데, 좀 더 풀어보면 n = 20; n = Num(20); // 임시객체 생성 n.operator=(Num(20)); // 임시객체를 대상으로 하는 대입 연산자 호출 이런 과정을 가진 것을 확인할 수 있다. 그리고 이러한 임시 객체의 생성을 통해서 .. 2019. 11. 28.
[ C++ ] << 와 >> 연산자 오버로딩 예제 2019. 11. 28.
[ C++ ] 펑터(Functor), 함수 오브젝트(Function object) 함수처럼 동작하는 클래스를 펑터(Functor) 또는 함수 객체, 함수 오브젝트(Function Object)라고 한다. 예제를 보자. Adder처럼 함수처럼 동작하는 클래스를 펑터 또는 함수 오브젝트라고 불린다. 2019. 11. 28.
[ C++ ] 스마트 포인터 ( Smart Pointer ) 스마트 포인터는 말 그대로 똑똑한 포인터라는 뜻이다. 사실 스마트 포인터는 객체인데, 포인터의 역할을 하는 객체를 뜻한다. 그럼 스마트 포인터란 무엇일까? 일단 포인터를 다시 살펴보자. 포인터는 메모리 주소를 저장하는 변수이다. 하지만 포인터는 단점이 있는데, 바로 new 연산자를 이용해서 동적 할당을 하게 되면 delete 연산자를 통해서 메모리 해제를 시켜줘야 한다는 점이다. ( 하지 않으면 메모리 누수가 발생한다. ) 이런 단점을 보완하여 생겨난 것이 스마트 포인터이다. 즉, delete 연산이 자동으로 일어난다는 점이다. 예제를 살펴보자 먼저 점에 대한 클래스이다. 연산자의 오버 로딩이 되어있다. 스마트 포인터는 포인터처럼 동작하는 객체이기 때문에, 두 연산자의 정의는 필수이다. 생성자의 인자로 .. 2019. 11. 28.