예를 들어서
class A {
protected:
int a;
};
class temp1 : public A {
public:
void setTemp1(int t1) {
a = t1;
}
};
class temp2 : public A {
public:
void setTemp2(int t2) {
a = t2;
}
};
이런 코드가 있으면 temp1이나 temp2에서 set함수를 통해서 A에 있는 변수인 a에 접근하는데
이게 원본 a를 바꾸는건가요? 아니면 상속받은 클래스에서 변수 a를 상속 받아 복사 해놓고 복사 해놓은것을 변경 하는건가요??
니 표현을 빌자면 원본이지
감사합니다. 코딩 할 때 주의해야 겠네욥
니가 자식을 생성시키면 부모 생성자 -> 자식 생성자 로 호출되면서 멤버들이 확보되잖아. 이때 자식의 크기는 중복없이 전체 멤버 변수의 크기라는것.
sizeof( 자식클래스 ) 해보면 확인할 수 있어.
코딩시 주의가 필요한 부분은 아니고 객체라는건 그냥 무엇을 갖고 있는가에 대한 encapsulation 형식일 뿐이니까, 생성 이란 과정을 통해 개체( instance ) 화 될 때 모든 개체들은 독립된 메모리 공간을 가지는거고, 그 독립된 메모리 공간 안에 부모의 형식을 갖고 있는거지.
만약 여러 개체들이 메모리상 단일한 멤버에 접근하고 싶다면 static 으로 선언하는 것. ( 여러 개체를 만들어도 전역 메모리 영역에 단 하나가 만들어지지 )
그러니까 너의 이야기에서 부모와 자식간의 복사란건 잘못된 접근이고 instance 와 또다른 instance 사이에서 분리가 발생하는 것. ( static 은 분리를 방지하는 것 )
아 무슨말인지 알것 같아요. 프갤에 좋은 글 자주 올려주셔서 많은 도움 받고 있습니다. 그리고 늦은 시간에 답변 감사드립니다ㅠㅠ