2016-12-13 1 views
-1

중첩 클래스 필드의 값을 설정하는 생성자 초기화 목록을 만드는 방법이 있습니까? 예컨대 :상위 클래스 생성자 초기화 목록을 사용하여 중첩 클래스 필드의 값 설정

.H

class A { 
    public: 
     A(int tmp); 
     class B{ 
      friend A; 
      int x; 
     }; 
     B b; 
    } 

통화 당

A(int tmp): x(tmp){}; 

어떻게 제대로 수행 할 작업 생성자 초기화 목록을 사용하여 해당? 가능한 경우.

편집 : 예제의 실수.

+0

'A'에는 'B'가 포함되지 않습니다. 그렇게하고 싶다면'A'에'B' 형 멤버 변수를 추가하고 초기화해야합니다. – Quentin

+0

'A'에'B' 회원이 있습니까? 왜 그것을 인스턴스화하려고하지 않는다면? – NathanOliver

+0

예, 죄송합니다. 코드가 수정되었습니다. 클래스 A에 B 객체가 있습니다. – Andrew

답변

2

예. A의 멤버 초기화 목록을 사용하여 b을 초기화 할 수 있습니다. 일반적으로 적절한 B 생성자를 호출하지만이 경우 B에는 실제로 생성자가 선언되어 있지 않지만 표준 집계 초기화가 작동하기에 충분히 간단합니다.

class A { 
public: 
    A(int tmp); 
    class B{ 
    public: 
     friend A; 
     int x; 
    }; 
    B b; 
}; 

A::A(int tmp) : b{tmp} {} 

참고 : B 회원을 공개로 설정해야했습니다. 그렇게하고 싶지 않으면 생성자를 선언해야합니다.

+0

저는 여기서 아이디어를 얻지 못했습니다. 'A :: A (int tmp) : b {tmp} {}'는 값을 x로 어떻게 설정합니까? 또 다른 필드'int y'가 있다면 어떻게됩니까? – Andrew

+0

'struct B {int x, int y} b = {1};'을 쓰는 것과 똑같습니다. 'b.x'는 첫 번째 멤버이며, 1로 초기화됩니다.'b.y'는 0으로 초기화됩니다. C++에서'struct'와'class' 사이의 유일한 차이점은 멤버와베이스에 대한 기본 액세스입니다. 아무것도. –

관련 문제