2012-10-19 3 views
2

회원이 초기화되지 않은 이유를 알 수 없습니다. 나는 이런 식으로 뭔가를 가지고 :C++ 생성자의 슈퍼 클래스 초기화 멤버

class A 
{ 
    public: 
    A() {member = 0;} 
    int getMember() {return member;} 
    protected: 
    int member; 
} 

class B : public A 
{ 
    public: 
    B() : A() {member = 10;} 
} 

나는 그것이 0 내가 여기서 무엇을 그리워 항상 B의 회원의 값을 취득하려고

?

감사합니다.

수정 : Ctor is public.

+0

@ 크리스의 코드를 확인할 수 있습니다

output: 10 10 

을 반환이 여전히를 구성 할을 'B' 객체를 만들고'member'에게'10'을 할당합니다. 그래도 그렇지 않다면 나는 깨달을 싶습니다. –

+2

생성자는 private입니다. 그래서 새로운 B()를 가질 수 없다고 가정합니다. 나는 C++을 한동안하지 않았으므로 잘못 될 수 있습니다. –

+8

@LewsTherin : 당신 말이 맞아요. 이것은 실제 코드가 아닌 게시 ​​된 코드를 가리키며,이 경우 동작은 인용 된 예제에 표시되지 않은 측면에서 발생할 수 있습니다. –

답변

3

나는 두 가지를 시도하고 모두 예상 결과 제공 :

class A 
{ 
    public: 
    A() {member = 0;} 
    int getMember() {return member;} 
    protected: 
    int member; 
}; 

class B : public A 
{ 
public: 
    B() : A() {member = 10;} 
}; 

int main() { 
    A* a = new B(); 
    cout << a->getMember() << endl; 
    B b; 
    cout << b.getMember() << endl; 
    return 0; 
} 

이 당신은 http://ideone.com/FArIAC

+0

나는 무엇이 잘못되었는지 아무런 단서가 없지만 지금은 효과가있다. 어쩌면 컴파일러 등에서 업데이트하지 않을 수도 있습니다. 감사! – user1760653

+0

다행 :) – alestanis