대부분의 게임 개발서들을 보면, 메인 프레임을 싱글톤 클래스로 구현해놓고..
실제 어플리케이션은 상속받아서 추가해야 될 함수들만 오버로딩해서 쓰는 구조더군요.

cApplication {
...
virtual bool Initial();
virtual void Render();
...
static cMainFrame* m_pgApplication;
}; // 메인 프레임. 싱글톤. 라이브러리 파일임.

...

// 실제 게임 플그램 골격.
class cGame : public cApplication {
...
virtual bool Initial();
virtual void Render();
...
};

대충 이런식.

그런데, 어떤 책에서 보니깐.. ( 아마 Game Coding Complete 거나 C++ for Game developer 란 책인데.. 빌려본거라서 정확히 어떤 책인지는 기억이 안나네요. -_-;; )

가상 함수의 다형성의 특성을 살리는데 이런 구조는 알맞지 않다고 읽었습니다.
즉, cApplication의 Initial()이나 Render()의 원래 함수는 쓰지 않고 실제로 쓰는것은
cGame의 Initial()이나 Render()함수뿐이기 때문에 가상함수의 오버해드를 감수할 이유가 없다는 이유때문입니다. 이럴땐 cGame 클래스가 cApplication을 포함하는게 낫다고 하는데..
virtual을 포기하고, 어떻게 포함을 합니까? ㅡ.ㅡ;;; 아무리 해봐도 좋은 구조가 않나오네요.

단순히 포함을 시킨다면, 만약 cGame 클래스에서 private로 선언된 m_life란 변수를  
cApplication::Initial() 내에서 사용할 수 없는 문제가 발생합니다.
cGame이 cApplication을 포함하는 것이지, cApplication이 cGame을 포함하는게 아니기 때문이죠.

그렇다고 두 클래스를 떼어놓고, cGame에서 cApplication을 friend로 선언한다면??
그렇다면 m_life를 cApplication::Initial()에서 쓸수는 있지만, 또다른 문제가 발생하게 됩니다.
우선, cApplication 등의 라이브러리를 가져다쓰는 클라이언트 입장에서 friend로 선언해줘야 한다는 제약이 붙어야 하며, cGame이 싱글톤으로 만들어지거나 전역으로 선언되어야 한다는 문제죠.
( cApplication에서 cGame의 어떤 인스턴스를 접근해야 되는지 알아야 하기 때문. )

질문은 여기까지입니다.

cApplication과 cGame 두 클래스의 관계는 어떻게 해야 하는지??
밝힐 수 있다면 업계에선 어떻게 쓰는지도 알고 싶네요.



PS.

제가 두서없이 써서 아무도 무슨 질문인지 모르진 않는지 걱정되네요.
지금까지 책처럼 cApplication 라이브러리를 상속받아 썼는데요..
최근에 읽은 책때문에 어떻게 포함을 시켜볼까 이리저리 바꿔봤지만..
만족할만한 구조가 안나와서 답답한 심정에 질문을 올려 봅니다.
참, 책에도 포함하는게 낫다라고만 나왔지.. 어떻게 포함시키는지는 안나왔어요.