템플릿 함수
-
정의
- 다양한 자료형에 대해 동일한 기능을 수행하는 함수를 작성할 수 있게 해줌
-
기본 개념
- 템플릿 함수는 함수의 기능은 결정되어 있지만, 자료형을 나중에 결정할 수 있도록 만드는 함수의 틀이다
template<typename T>
T Sunction(T parameter)
{
return parameter;
}
- 주요 특징
- 선언 방법
- template 또는 template 형태로 선언
- 여러 타입을 사용할 경우 template <typename T1, typename T2> 형태로 선언 가능
template <typename T>
T add(T a, T b)
{
return a + b;
}
//사용
int result1 = add(2,3) //int 타입
double result2 = add(3.3, 4.1) // double 타입
-
장단점
- 장점
- 코드의 재 사용성 향상
- 소프트웨어의 생산성과 유연성 증가
- 런타임 속도가 빠르다
- 단점
- 컴파일 시간이 상대적으로 느림
- 컴파일러에 따라 지원하지 않을 수 있음
- 디버깅이 어렵다는 단점 존재
-
특수화
- 특정 타입에 대해 다른 동작이 필요한 경우 템플릿 특수화를 통해 별도 처리 가능
template<>
void Test(std::vector<Datatype>& V)
{
//특정 타입에 대한 특별 구현
}
클래스 동작 원리
- 클래스란?
- 데이터(멤버 변수)와 기능(멤버 함수)을 하나의 단위로 캡슐화하는 사용자 정의 데이터 타입
class Test
{
public:
Test();
~Test();
void SetData(int data)
{
m_nData = data;
}
private:
int m_nData;
}
- 특징
- 접근 제어
- private : 클래스 내부에서만 접근 가능
- protected : 상속받은 클래스까지 접근 가능
- public : 어디서든 접근 가능
- 생성자와 소멸자
- 생성자
- 클래스 이름과 동일한 이름을 가진 멤버 함수
- 객체가 생성될 때 자동으로 호출
- 반환 타입이 없음
- 멤버 변수 초기화에 사용
- 소멸자
- 클래스 이름 앞에 ~가 붙음
- 객체가 소멸될 때 자동으로 호출
- 매개변수를 가질 수 없음
- 동적 할당된 메모리 해제 등 정리 작업을 수행
- 주의사항
- 생성자는 여러개 정의 가능(오버로딩)
- 소멸자는 반드시 하나만 존재
- 명시적으로 정의하지 않으면 컴파일러가 기본 생성자와 소멸자 제공
- 동적 할당된 메모리는 반드시 소멸자에서 해제해야 됨
- 메모리 관리
- 객체 생성
- 스택 메모리 : MyClass obj;
- 힙 메모리 : MyClass* ptr = new MyClass();
- 맴버 변수 할당
- 객체가 생성될 때 멤버 변수를 위한 메모리 할당
- 멤버 함수는 모든 객체가 공유
- 상속과 다양성
class Parent
{
virtual void show(){}//가상함수
}
class Child : public Parent
{
void show() override {} //오버라이딩
}