CPP_어소_56_클래스 템플릿

CJB_ny·2022년 7월 1일
0

CPP_AROTHO

목록 보기
55/83
post-thumbnail

이렇게 해주는 순간 클래스 템플릿이 됨.

클래스가 아니라 클래스들을 만들 수 있는 더 근본적인 원형이 된 것이다.

그래서 타입을 정해주어야한다. 그래야 그런 버젼의 클래스가 생길것이고

그 객체를 만들어서 쓸 것이라

그러면 이거 다 T로 바뀌어야하나?

인자는 어떻게 되야하나?

PushBack 함수 설계 생각

왼쪽에 가변배열 객체이고 오른쪽이 넣어줄 데이터 int 이다.

그래서 PushBack이라는 함수에 이 값을 복사를 시켜서

PushBack이 가르키고있는 힙 메모리 공간에 현재 인덱스에 맞게 집어 넣는다.

T라는 데이터 단위 크기 생각

PushBack호출하면 인자로 넘겨받은 T의 단위가 크면 이것을 그대로 지역 변수로 복사를 해서

주소에다가 넣는 것이다.

그래서 참조로 주는게 더 좋지 않을까??

(T가 클 때를 대비해서)

수정은 안할 것이고 참조(주소)만 받아간다.

왜냐하면 데이터를 넣기만 할것이라

operator

참조하는 대상의 T타입이 저장되어있으니까 T로 바꿔줘야함.

템플의 함수들

얘내들은 CPP 파일에 있으면 안되고 헤더파일에 있어야한다.

왜??

우리가 헤더파일에서 "선언" -> CPP파일에서 "선언"된 것을 "구현"함.

그런데 main함수에서 class< float > test;

이렇게 선언했다고 치면은 컴파일러는 그냥 float 버젼의 class를 만들어 주고 만다.

실구현 부분은 Arr.cpp에 있는데...

그런데 컴파일러는 오류를 내지 않는다.

CPP파일에서는 뭐가 요청이 되었는지 모른직다.

그래서 템플릿은 구현 부분은 전부 헤더에 박아 넣는다❗

선언 및 구현 => IN 헤더파일

T버젼의 생성자

템플릿이기 때문에 template < typename T> 라고적어주고

그런데 CArr 클래스의 T 버젼 안에 구현되어있는 CArr()이라는 생성자를 지칭하는 것이다.

if T == float이면 float 버젼 안에 있는 생성자(CArr())이다. 이런뜻.

그리고 new 연산자(동적할당을)를 통한 객체 생성도 T버젼으로 변경해야함.

PushBack이렇게 수정 ㄱㄱ.

const ref ❗

const를 붙인다 어디어? T타입의 주소에다가 그러면 그 주소의 값은 수정 불가능해짐

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글