템플릿(3)
-
[C++] vector 내부에 iterator 클래스 구현 (+ 연산자 오버로딩, 복사 생성자)
vector 내부에 iterator 클래스 만드는데, 클래스 템플릿이기 때문에 내부에 있는 iterator도 템플릿이 된다.iterator는 데이터의 시작 주소와 가리키고 있는 데이터가 시작 주소로부터 몇 번째인지 알아야 한다.즉, iterator는 데이터의 시작 주소와 인덱스(시작 주소로부터 몇 칸 떨어져 있는지)만 알면 된다. ex) 3번째를 가리키는 경우, 시작 주소와 인덱스 2의 주소만 알면 된다.또한 자료형도 알아야 하는데, 템플릿이기 때문에 데이터의 시작 주소 타입은 `T*`이다. ▷ 코드CArr.h#pragma once#include // 클래스 템플릿template// T는 가변 배열에 저장될 데이터 타입이다.class CArr // CArr로 vector를 만들어도 CArr과 iter..
2024.04.03 -
[C++] 템플릿 (함수/클래스)
아래 링크 클릭 시 해당 본문으로 이동템플릿 (Template)함수 템플릿클래스 템플릿▷ 전체 코드템플릿 (Template)template : 주형(용해된 금속을 주입하여 주물을 만드는 데 사용하는 틀)• ``에서 `T`는 템플릿 타입 매개변수로, 템플릿에 사용될 데이터 타입에 대한 자리 표시자(placeholder) 역할을 한다.• 보통 `typename`과 `T`로 작성하지만 내 마음대로 작성해도 된다.(ex. class로 적어도 되지만, 여기서 class는 우리가 알고 있는 class가 아니다.)※ 함수 템플릿은 함수가 아니고, 클래스 템플릿은 클래스가 아니다.함수 템플릿• 함수를 찍어내는 템플릿(틀) • 함수 오버로딩(함수명 동일하지만 인자 개수 또는 타입이 다른 게 가능)을 사용할 때 사용한다...
2024.04.02 -
[C++] 구조체 · 클래스 템플릿으로 리스트 구현
코드를 작성할 때 노드는 구조체로, 리스트는 클래스로 만들었지만, C++에서 클래스와 구조체는 같아졌기 때문에 어떤 것을 사용하든 크게 상관은 없다.구조체도 생성자, 소멸자, 상속이 가능해졌다.단, 클래스와 구조체의 차이점은 범위 지정자의 기본값이 다르다는 것이다.구조체는 public이고 클래스는 private이다. 구조체와 클래스 중 어떤 것을 사용할지 모르겠을 때, 나름의 규칙을 만들면 좋다.ex) 기능이 많지 않을 때(단순히 데이터를 묶어놓고 데이터를 저장하는 등)는 구조체 키워드를, 리스트처럼 컨테이너로써의 복잡한 기능이면 클래스로 선언한다. ※ 구조체 템플릿은 구조체가 아니다.프로그래머는 넣은 데이터가 노드 단위인 것을 알 필요가 없어야 된다.다시 말해서, 리스트에 데이터를 넣을 뿐, 데이터를 ..
2024.03.18