2017-12-12 13 views
0

다른 종류의 케이크를 인보이스에 삽입하고 여러 파생 클래스를 사용하는 프로그램을 작성하려고합니다. 파생 클래스의 생성자를 사용하여 추상 부모 클래스의 일부 데이터 멤버를 초기화하고 싶습니다. 데이터 멤버를 비공개로 유지하고 파생 클래스 내부에서 기본 클래스 생성자를 호출하여 초기화 할 수있는 방법이 있나요? 예 : 생성자의 몸 내부파생 클래스의 생성자 안에 기본 클래스의 생성자를 호출하는 방법 C++

class Cake: 
public: 
    Cake(string flavor, string frosting) { 
     cakeType = flavor; 
     frostingType = frosting; 
    } 
private: 
    string cakeType; 
    string frostingType; 
}; 

class LayerCake: public Cake { 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) { 
     numLayers = layers; 
     cakeQuantity = quantity; 
     Cake(flavor, frosting); 
private: 
    int numLayers; 
    int cakeQuantity; 
}; 

답변

1

Cake(flavor, frosting); 그냥 파생 클래스의 기본 클래스 하위 객체와는 아무 상관이없는, 임시 Cake를 구축합니다.

원하는 것은 member initializer list입니다.

class LayerCake: public Cake { 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) : Cake(flavor, frosting) { 
//   ~~~~~~~~~~~~~~~~~~~~~~~~ 
     numLayers = layers; 
     cakeQuantity = quantity; 
    } 
    ... 
}; 
+0

헤더 파일을 사용하는 경우이 구문을 선언 및 구현 또는 구현에만 사용합니까? – Jake

+1

@Jake 구현 만. – songyuanyao

+0

정말 고마워요! – Jake