2017-09-19 8 views
2

파생 클래스 80의 크기가 다음 코드에서 나타나는 이유는 무엇입니까?
는 저에 따르면, 개인 데이터 멤버는 상속되지 않고 sizeof(Derived) 40
파생 클래스의 크기 [2]

#include <iostream> 
#include <cstdlib> 
using namespace std; 

class Base{ 
int a[10]; 
    public: 
    int b[10]; 
}; 
class Derived:public Base{ 

}; 
int main() 
{ 
    cout<<sizeof(Derived)<<endl; 
} 
+0

좋은 질문 귀족 :) – iamsankalp89

+0

[C++의 기본 클래스 개체 및 파생 클래스 개체의 크기] 가능한 복제본 (https://stackoverflow.com)/questions/27007797/base-class-object-and-class-object-in-c) – dlmeetei

+2

[상속 및 비공개 멤버]의 완벽한 복제 (https://stackoverflow.com/questions/) 6169152/상속 및 사립 - 회원) – YSC

답변

3

개인 데이터 멤버가 파생 클래스에 액세스 할 수 없기 때문에 사용자가이를 생략 할 수 있다는 의미는 아닙니다. 고려 :

class Base{ 
    int a[10]; 
public: 
    int b[10]; 
    int getFirstA() { return a[0]; } 
}; 

class Derived:public Base{ 
}; 

int main() 
{ 
    Derived d; 
    int a = d.getFirstA(); 
} 

Base의 구현은 여전히 ​​개인 회원 존재에 의존합니다. Base의 구현이 Derived의 구현을 구성하기 때문에 Derived 및 해당 클라이언트가 직접 액세스 할 수없는 경우에도 여기에서 개인 멤버를 제거하는 것은 바람직하지 않습니다.

3

개인 회원 만 볼 수없는, 상속 인쇄해야합니다. 민간 구성원을 사용하여 구현 세부 정보를 숨기지 만 상태는 어딘가에 저장해야합니다.

+0

감사! 그건 의미가있다. – user7098526

1

민간 데이터 멤버는

잘못을 상속하지 않습니다!

개인 데이터 멤버는 표시되지 않더라도 상속됩니다.

왜 다음 코드에서 파생 클래스 80의 크기가?

으로는 (AN int의 크기가 4 것 같다 시스템에 따라서 10 * 4 + 10 * 4 = 80) 두 배열이 때문에 클래스의 크기에 영향을, 상속, 위의 설명했다.

0

개인 회원은 액세스 할 수 없지만 상속됩니다. 크기가 80

그래서 그 크기가 40+40=80

0

단지에 액세스 할 수없는 개인 회원이다, 그러나 그것은 상속됩니다 이유는 이유입니다. 그것이 20 개의 정수를 포함하기 때문에 크기는 20 * 4 = 80입니다.