2026-03-13 TIL (14일차)
2026-03-13 TIL (14일차)
C++공부
임시 객체는 const 참조자(const T&)에 전달될 수 있으며, 함수가 실행되는 동안에는 죽지 않고 살아남는다.
추상 클래스(Abstract Class) 판별법
- 순수 가상 함수(
virtual void func() = 0;)가 하나라도 포함되어 있다면 해당 클래스는 추상 클래스가 됩니다.- 추상 클래스는 객체(Instance)로 생성할 수 없으며, 반드시 자식 클래스에서 구현을 강제하는 ‘설계도’ 역할을 합니다.
바인딩의 규칙: 다형성과 동적 바인딩
- 부모 포인터에 자식 객체를 할당했다면, 자식의 실제 정체를 식별하고 특화된 기능을 호출하기 위해 동적 바인딩(가상 함수)이나 dynamic_cast를 사용하는 것이 원칙입니다.
- 정적 바인딩은 속도가 빠르지만 자식 클래스의 다형성을 무시하므로, 객체의 실제 타입을 런타임에 확인해야 하는 경우에는 반드시 동적 메커니즘을 활용해야 합니다.
1. 연산자 오버로딩 사용 빈도 순위
| 순위 | 연산자 | 주요 사용처 | 연금술사 프로젝트 현황 |
|---|---|---|---|
| 1위 | =, ==, <, << | 모든 일반 클래스 | Item 클래스 등에 이미 구현됨 |
| 2위 | [] | 배열 / 인벤토리 클래스 | Inventory에 추가 시 접근성 향상 |
| 3위 | +, - | 수학 / 좌표 / 재화 계산 | 현재 프로젝트에서는 선택 사항 |
| 4위 | ->, * | 스마트 포인터 / 반복자 | 라이브러리 제작 시 필수 요소 |
| 5위 | new, delete | 메모리 관리 시스템 | 표준 방식을 지향하며 거의 수정 안 함 |
⚠️대입 연산자(=) 오버로딩 시 4가지 주의사항
자기 대입 방지 (Self-Assignment Guard)
a = a;와 같은 코드에서 발생할 수 있는 데이터 증발 사고를 막아야 합니다.기존 자원 해제 (Resource Cleanup)
대입받을 객체가 이미 동적 할당된 메모리를 소유하고 있다면, 새로운 데이터를 덮어쓰기 전에 기존 자원을 정리해야 합니다.깊은 복사 (Deep Copy)
부모 클래스 대입 호출 (Base Class Chaining)
상속 관계에 있는 자식 클래스의 대입 연산자는 부모로부터 물려받은 멤버 변수까지 자동으로 책임져주지 않습니다.
1 2 3 4 5 6 7 Child& operator=(const Child& ref) { if (this == &ref) return *this; Parent::operator=(ref); // ✅ 부모 클래스의 대입 연산자 호출 // 자식 클래스만의 멤버 복사 로직... return *this; }
4번 과제 필수 기능
1. 재료로 검색 기능
다중 재료 검색 vs 단일 재료 검색
둘 중 무엇을 구현해야하는지 몰라서 물어본 결과 둘 다 상관없는데 후자를 구현하라고 하셨습니다.
1
std::vector<PotionRecipe*>FindRecipeByIngredient(const std::string& name);
- 해당되는 모든 레시피를 출력해야해서 vector에 저장했다가 모든 벡터를 순회하면서 출력하게 합니다.
- 자료형을 포인터로 사용한 이유는 혹시나 객체 크기가 커지면 복사 비용을 싸게 해줄려고 사용했습니다.
This post is licensed under CC BY 4.0 by the author.