1. Day10
- C++ 문법 학습
- 학습 가이드 실습 과제
- 개인공부
2. C++ 문법 학습(Day10)
게임 개발자를 위한 C++ 문법(1-7, 2-1)
#include <iostream>
using namespace std;
// TODO: Phone 클래스 구현
// - displayBrand()와 showFeature() 순수 가상 함수를 포함하도록 구현하세요
// - 소멸자를 반드시 virtual로 선언하세요
class Phone
{
public:
virtual void displayBrand() = 0;
virtual void showFeature() = 0;
virtual ~Phone() {}
};
// Samsung 클래스 작성 (Phone 클래스를 상속받음)
class Samsung : public Phone
{
public:
void displayBrand()
{
cout << "Samsung" << endl;
}
void showFeature()
{
cout << "Galaxy S 시리즈" << endl;
}
};
// pple 클래스 작성 (Phone 클래스를 상속받음)
class Apple : public Phone
{
public:
void displayBrand()
{
cout << "Apple" << endl;
}
void showFeature()
{
cout << "iPhone Pro 시리즈" << endl;
}
};
// Xiaomi 클래스 작성 (Phone 클래스를 상속받음)
class Xiaomi : public Phone
{
public:
void displayBrand()
{
cout << "Xiaomi" << endl;
}
void showFeature()
{
cout << "Redmi Note 시리즈" << endl;
}
};
int main()
{
Phone* P[3];
P[0] = new Samsung;
P[1] = new Apple;
P[2] = new Xiaomi;
for (int i = 0; i < 3; i++)
{
P[i]->displayBrand();
P[i]->showFeature();
}
for (int i = 0; i < 3; i++)
{
delete P[i];
}
return 0;
}
| 구분 |
일반 포인터 |
스마트 포인터 |
| 메모리 해제 |
수동(delete) |
자동 |
| 메모리 누수 위험 |
높음 |
낮음 |
| 소유권 관리 |
없음 |
명확함 |
| 종류 |
특징 |
사용 시점 |
| unique_ptr |
단독 소유권 복사 불가 |
하나의 소유자만 필요할 때 |
| shared_ptr |
공유 소유권, 참조 카운트 |
여러 곳에서 공유할 때 |
| weak_ptr |
소유권 없음, 관찰만 |
순환 참조 방지 |
unique_ptr<int> up = make_unique<int>(10);
shared_ptr<int> sp = make_shared<int>(20);
weak_ptr<int> wp = sp;
// 원시 포인터 얻기
int* p1 = up.get(); // unique_ptr
int* p2 = sp.get(); // shared_ptr
int* p3 = wp.lock().get(); // weak_ptr (lock 먼저 필요)
| 스마트 포인터 |
직접 대입 |
get() 사용 |
| unique_ptr |
X |
O |
| shared_ptr |
X |
O |
| weak_ptr |
X |
X(lock 필요) |
3. CH2 학습 가이드 - 12/10
#include <iostream>
using namespace std;
void PrintNumber(int* pNumber)
{
for (int i = 0; i < 10; i++)
{
cout << pNumber[i] << " ";
}
cout << '\n';
}
int main()
{
int number[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
PrintNumber(number);
return 0;
}
#include <iostream>
using namespace std;
void SwapByPointer(int* pA, int* pB)
{
if (pA == nullptr || pB == nullptr)
{
cout << "비정상적인 접근" << '\n';
return;
}
int temp = *pA;
*pA = *pB;
*pB = temp;
}
void SwapByReference(int& refA, int& refB)
{
int temp = refA;
refA = refB;
refB = temp;
}
int main()
{
int a, b;
a = 10;
b = 20;
// 초기 값
cout << a << " " << b << '\n';
int* A = nullptr;
int* B = &b;
// 예외 처리 확인용
SwapByPointer(A, B);
A = &a;
// 정상적인 포인터 교환 함수 사용
SwapByPointer(A, B);
cout << a << " " << b << '\n';
// 레퍼런스 교환 함수 사용
SwapByReference(a, b);
cout << a << " " << b << '\n';
return 0;
}
4. 내일 계획 : 지금 템포에서 알고리즘 문제 풀이 추가