반응형
중첩클래스는 말그대로 class의 class의 class의 class의 class다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ (ㅈㅅ.. 근데 진짜임 ㅁㅊㅋㅋ)
이해를 돕기위한 사진을 보고 가시겠습니다...
ㅈㅅ 이해를 돕기위한건 핑계고 그냥 이름 듣자마자 이거 생각나서 넣어봄.
사실 이번 주제는 하나도 어려운게 아니라 그냥 이런게 있다 하는 개념이라 뭐 별거없다.
그래서 이번 코드는 게임엔진 구조도 익힐 겸 실제로 사용하는 요소들을 넣어서 짜봤다.(Scene, Object, ObjectManager) ㅈㄴ 힘들었으니 개추부탁드립니다....
코드부터 바로 보고 시작하자.
#include <iostream>
class ObjectManager;
class Object
{
private:
char* m_name;
public:
Object(const char* _name)
{
m_name = new char[strlen(_name) + 1];
strcpy_s(m_name, strlen(_name) + 1, _name);
}
~Object()
{
delete[] m_name;
}
char* GetName()
{
return m_name;
}
};
class Scene
{
private:
// Scene에서만 쓸거면 Scene내부에 class를 만들어 준다. (근데 원래는 이러면 안댐 사실)
class ObjectManager
{
private:
Object* m_objectList[10]; // 걍 정적으로 선언헀지만 실제론 가변길이 컨테이너를 사용해야 한다능
int size = 0;
public:
ObjectManager() = default;
~ObjectManager() = default;
Object* CreateObject(const char* _name)
{
Object* obj = new Object(_name);
m_objectList[size++] = obj;
return obj;
}
Object* GetObject(int _val)
{
return m_objectList[_val];
}
int GetObjectCount()
{
return size;
}
};
ObjectManager* m_objectManager;
public:
Scene()
{
m_objectManager = new ObjectManager();
}
~Scene()
{
delete m_objectManager;
}
ObjectManager* GetObjectManager() { return m_objectManager; }
void Show()
{
std::cout << "Total ObjectCount : " << m_objectManager->GetObjectCount() << '\n';
for (int i = 0; i < m_objectManager->GetObjectCount(); i++)
{
std::cout << i << "st Object : " << m_objectManager->GetObject(i)->GetName() << '\n';
}
}
};
int main()
{
Scene myScene;
myScene.GetObjectManager()->CreateObject("코딩이 즐겁다1");
myScene.GetObjectManager()->CreateObject("코딩이 즐겁다2");
myScene.GetObjectManager()->CreateObject("코딩이 즐겁다3");
myScene.Show();
}
사실 그냥 클래스 안에 클래스나 struct를 짤 수 있다는 것만 알면 된다. 걍 심심해서 짜봄...
너무 대충 쓴 것 같아서 추가
list나 vector, stack 등과 같은 컨테이너의 iterator도 중첩클래스의 일부라고 보면 좋다.
STL - iterator — 개발자의 글쓰기 (tistory.com)
이분거도 보면 class안에 struct, 혹은 class가 들어간다.
위 사진에서 예를 들면 NODE와 MyListIterator객체는 MyList의 내부에서 밖에 쓸 일이 없으므로 MyList안에 class를 구현한 것이다.
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] DFS 구현해보기 (0) | 2024.07.10 |
---|---|
[C++] operator 연산자 (0) | 2024.06.14 |
[C++] friend에 대해 알아보자.araboza (0) | 2024.06.12 |
[C++] const, 근데 class를 곁들인 (0) | 2024.06.11 |
[C++] static, 근데 class를 곁들인 (0) | 2024.06.11 |