2012-07-25 7 views
1

나는 기본 클래스가 있으며이 클래스에서 파생되는 클래스는 거의 없습니다. 기본 클래스에 복사 생성자를 작성하지 않았으므로 기본 생성자를 사용하고 있습니다.파생 클래스의 복사 생성자

그래서 나는이 코드를 작성하는 경우 :

base* b; 
b = new base(*this) 

잘 작동하지만, 내가 이런 걸 쓰는 경우 :

base* b; 
b = new derive(*this) 

을가 파생 클래스에서 나에게 일치하는 기능에 대한 오류를 제공을 .

파생 클래스 복사 생성자에 기본 클래스 'this 포인터를 전달하여 초기화 할 수 없습니까?

답변

3

Derived 복사 생성자는 인수로 const Derived &을 사용합니다. 인수로 const Base &을 사용할 수 없습니다.

당신은 어떻게하려고 :

Derived *d = new Derived(); 
Base *b = new Base(*d); //ok, since Derived is subclass of Base 

Base *b = new Based(); 
Derived *d = new Derived(*b); //error, since Base in not subclass of Derived 

당신은 생성자를 제공 할 필요가 Base에서 Derived 구축하기 위해 자신 :

Derived(const Base &base) {...} 
+0

Andrew, Derived (const Base & base) {...}를 생성 해 주셔서 감사합니다. 먼저 기본 클래스 복사 생성자를 작성해야합니까? 사실, 당신이 제안한 파생 된 클래스 재정의 버전을 추가하려고했지만 기본 클래스에서 일치하는 함수를 불평하지 이제 : – Ruchi

+0

@Ruchi : 기본 하나 충분하지 않습니다 - 예.하지만 기본 복사 생성자를 호출하는 것을 잊지 마세요. 파생 된 이니셜 라이저 목록 – Andrew

+0

좋아, 내가 파생 된 파생에서 파생 된 :: derive (const base & b)하지만 오류가 발생합니다 : 오류 : 기본 호출 :: base(), 일치하는 함수를 기본 없음 :: base (const base & b)가 base :: base()를 호출하려고 시도하는 이유를 알 수 있습니다. – Ruchi

0

과부하 기본 소요 버전으로 파생 생성자 클래스를 매개 변수로 사용합니다. 그게 효과가있다.

0

아니요, 불가능합니다. base의 다른 서브 클래스가있을 수 있습니다. derive 클래스의 복사 생성자가 const base&을 허용하면 base이라는 다른 하위 클래스의 인스턴스를 전달할 수 있습니다. derive 클래스의 복사 생성자는 그러한 개체를 어떻게 처리해야할지 알 수 없습니다.