2014-01-24 3 views
2

나는 다른에 따라 그 중 하나는 두 개의 클래스를 가지고 있다고 상상해생성자 체인 및 초기화 구문

class A 
{ 
public: 
    A(bool flag) 
    { 
    } 
}; 

class B 
{ 
public: 
    B(A a) : 
     mA(a) 
    { 
    } 
    A mA; 
}; 

지금은 또한 두 개의 다른 클래스가 상상 : 푸와 바을 사용하는 기본 클래스를, 그리고 그에서 유래 한 클래스 :

class Base 
{ 
public: 
    Base(A a, B b) : 
     mA(a), 
     mB(b) 
    { 
    } 

    A mA; 
    B mB; 
}; 

class Derived : Base 
{ 
    Derived() : 
     Base(A(true), B(????)) 
    { 
    } 
}; 

여기서 어떻게 막대를 만들 수 있습니까? 이처럼

+0

어쩌면 틀 렸지만 클래스 바가 유효하지 않다고 생각합니다. 어쩌면 당신은 그냥 생략하고 우리가 알고 있다고 가정 할 수 있을까요? – crush

+4

왜 'new'를 사용해야한다고 생각하십니까? –

+2

게시하기 전에 컴파일하십시오. 이 코드에는 실제 질문을 혼란스럽게하는 많은 오류가 있습니다. –

답변

1

:

class Derived 
: 
    public Base 
{ 
public: 
    Derived() 
    : 
    Base (true, Foo (false)) 
{ 
}; 

현재 new를 사용하지 않습니다. 우리는 더 이상 C#이 아니에요, 토토. new은 개체의 동적 인스턴스화를위한 것이며 포인터를 반환합니다. 여기에 동적으로 할당하지 않고 포인터를 저장하지 않습니다. new을 사용하지 마십시오.

+0

'new'는 더 이상 질문에 사용되지 않습니다. 'Foo (false)'('B (false)')는 무관계 ** 인스턴스를 인스턴스화하는 암시 적 생성자 A를 사용합니다. OP는 클래스 "A"와 "B"의 ** 관련 인스턴스 **에 대한 포인터 또는 참조를 사용하기 위해 ** 필요합니다 **. –

+0

@ OP : OP는 질문에서 A와 B의 인스턴스를 명시 적으로 인스턴스화했습니다. 왜 여기에 레퍼런스를 사용하는 것이 좋을지 모르겠다. –

+0

_ '왜 여기에 참고 자료를 사용 하시겠습니까?'_ OP가 ** 관련 수업 **을 요구하고 있었기 때문에 : "그 중 하나는 다른 것에 종속되어 있습니다" –

0

내가 다른 한편으로 의존 중 하나는 두 개의 클래스, ...
Derived() : Base(A(true), B(을 상상해 ????

class A 
{ 
public: 
    A(bool flag) { } 
}; 

class B 
{ 
public: 
    B(A& a) : mA(a) { } 
    A& mA; 
}; 
: ))

은 참조를 사용해야합니다 의 클래스에 대한 종속성 또는 관계 (만큼 당신이 클래스의 간단한 해당 사본 A 인스턴스를 참조하지 않는)를 설계하려면

그리고하자 클래스 Base는 수행

class Base 
{ 
public: 
    Base(bool flag) : mA(flag), mB(mA) { } 

private: 
    A mA; 
    B mB; 
}; 

은 기본은 constr 허용하려면 (생성자 본문에 mB.mA을 설정할 수 있습니다 Derived) uction 나중에 할당, 사용 포인터 : 후자 옵션의

class B 
{ 
public: 
    B() 
    : mA(nullptr) { } 
    B(A* a) : mA(a) { } 

    A* mA; 
}; 

, 여기 c++11 or other smart pointer 구현 (std::unique_ptr, std::shared_ptr, std::weak_ptr 참조)의 변종을 모두 언급하지!