2012-01-20 4 views
1

Base에서 파생 된 경우 이와 같은 전환 생성자를 정의하는 것이 합리적입니까?변환 생성자, 매개 변수로 기본 클래스?

Derived(const Base& b) : Base(b) { 
    //... 
} 

Derived 복사 생성자에 문제가 있습니까?

여기서 내 의도를 지정합니다. Base 클래스와 파생 클래스가 세 개 있습니다. 각 파생 클래스에 대한 객체가 목록에 저장됩니다. 각 유형마다 하나씩 있습니다. 그런 다음 개체가 저장되어 있지만 기본 클래스로있는 파일이 있습니다. 파일의 한 줄은 파생 클래스 유형이 해당하는지 나타냅니다. 내 코드는 개체가 있는지 (기본 클래스에서 상속 한 == 연산자를 사용하여) 올바른 목록을 조사해야합니다. 더 나은 해결책이 있는지 알려주십시오.

+0

당신의 당신이 원하는 특정 동작이 있습니까? – templatetypedef

+0

당신은이 역할을 위해 캐스팅을하고 있습니다. 생성자를 원하는 특별한 이유가 무엇입니까? – DumbCoder

+0

기본 클래스와 파생 클래스가 3 개 있습니다. 개체를로드해야합니다. 텍스트 파일에서. 객체는 기본 클래스로 저장되지만 선은 파생 클래스를 나타냅니다. 그런 다음'Derived' 객체를 생성해야합니다. 내가 나 자신을 분명히했는지 모르겠다. 나는 영어에 몇 가지 문제가있다. – Pincopallino

답변

0

여기서 얻으려는 것이 다소 혼란 스럽지만 기본 클래스 객체를 파생 클래스로 캐스팅하는 것은 거의 잘못된 생각입니다.

파생 클래스 개체 모음을 기본 클래스로 저장 한 경우 실제로 파일 형식을 나타내는 "파일 줄"이 필요하지 않습니다. 기본 클래스 (예 : GetType())에 가상 함수를 정의하고 파생 클래스마다 다르게 구현하십시오. 또는 (if (obj.GetType() ==) 스타일 프로그래밍이 단일 인터페이스를 가지며 각 파생 클래스에 서로 다른 구현을 제공하지 않도록하는 것이 더 좋습니다. 파생 클래스는 그것이 무엇인지, 그리고 최상위 코드가 알 필요가 없습니다

0

근본적인 문제에 대한 적절한 솔루션은 공장 방법 :... std::shared_ptr<Base> ReadObject(std::istream&); 적절한 형태의 객체를 파일에서 "유형"라인을 읽고 만들 수 있습니다이 방법

은 무엇입니까
관련 문제