2014-10-05 2 views
0
#include<cstdio> 
#include<iostream> 
using namespace std; 
class A 
{ 
public: 
    int x; 
}; 
class B: public A 
{ 
}; 
int main() 
{ 
    B b; 
    b.x=5; 
    cout<<b.x<<endl; 

    return 0; 
} 

나는 위의 코드를 가지고 있습니다. 괜찮아요. 클래스 A에서 클래스 B를 상속 받았을 때 멤버 변수 x가 클래스 B에서 선언되었거나 클래스 B가 클래스 B에서 선언 한 것처럼 알고 싶습니다. 클래스 A의 멤버 변수 x?
두 개의 다른 클래스에 동일한 이름을 가진 두 개의 변수가 있거나 하나의 변수 만 있고 두 클래스의 객체에 액세스 할 수 있습니까?
두 개의 다른 클래스에 같은 이름의 두 개의 다른 변수가있는 경우 왜 파생 클래스의 객체가 선언 될 때 기본 클래스의 생성자가 호출됩니까?파생 클래스가 멤버 변수에 메모리를 할당합니까?

+1

여기 객체 당 하나 명의 멤버 변수가있다. –

+0

음, 방금 예제를주었습니다 ... –

+0

그러면 실제 질문은 무엇입니까? –

답변

1

파생 클래스의 개체를 만들면 기본 클래스 하위 개체가 파생 클래스 개체의 메모리 레이아웃에 포함됩니다. 그래서, 귀하의 질문에, 거기에 파생 된 개체의 일부가 될 변수에만 있습니다. 여기서 정적이 아닌 멤버 만 사용하기 때문에 파생 된 각 객체는 기본 클래스 하위 객체를 메모리에 배치합니다. 기본 클래스 객체를 만들면 다른 객체를 나타내는 다른 메모리 조각이 만들어지며 이전에 생성 된 파생 객체와는 아무런 관련이 없습니다.

당신의 의심을 분명히 밝힐 수 있기를 바랍니다.

이 C++ 객체 모델을 이해하는 좋은 책입니다

http://www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545/ref=sr_1_1?ie=UTF8&qid=1412535828&sr=8-1&keywords=inside+c%2B%2B+object+model

+0

절대적으로 !!! 고맙습니다 !!! :) –

관련 문제