아래와 같은 class 두개가 있다고 가정하면
A class에서는 B class 를 인자로 가지는 함수 또는 포인터 변수가 있고
B도 동일하게 A class를 인자로 가지는 함수 등이 있을 경우
class A{
int Test(A a, B b);
};
class B {
int Test(A a, B b) ;
};
컴파일 하면 A class에서 B를 참조하기 때문에 아직 B에 대한 정보를 모르는 상황이어 컴파일 error가 발생합니다.
그래서 class A와 B를 순서를 바꾸면
class B {
int Test(A a, B b) ;
};
class A{
int Test(A a, B b) ;
};
동일하게 B class에서 A를 참조하는데 아직 A 에 대한 정보를 모르는 상황이니 컴파일 error 가 발생합니다.
그래서 아래와같이 class prototype을 먼저 선언해 두면 위와같은 문제를 해결할 수 있습니다.
class A;
class B;
class A{
int Test(A a, B b) ;
};
class B {
int Test(A a, B b) ;
};
그러나 class prototype 이 먼저 선언되었다고 해서 해당 class가 정의 되기 전에는 인스턴스를 생성할 수는 없습니다.
하안인 님이 쓰신 글 :
: class cb; --> 이부분이 의미하는것은 무엇인지요.
:
: class cb
: {
: .......
: };
:
:
: class cb ; 는 클래스를 선언만 해주는 것 아닌가요. 이부분이 없어서 되는것이 아닌지..
:
:
: cb *c1 = new cb; --> 이때 생성자가 실행되는것으로 알고 있는데요.
: 위와 같이 동적으로 생성해서 사용하는것과 cb를 바로 사용하는것과의 차이는 어떤지요.
:
: vc++로 된 소스를 보던중에
:
: vc에서는
: 선언만하고
: cb *c1;
: 으로 사용하는데 차이점을 알고 싶어서요.
: 즉
:
: cb& cb::instance()
: {
: static cb c1;
: return c1;
: }
:
: 으로
: cb::instance()._bc = true;
:
: 으로 값이 바뀌면
: 다음에 동적으로 생성해도 _bc의 값은 true로 설정되어있는건가요.
: