C++소스질문입니다
월향
class X{
public: virtual void a() { cout a of X endl; }
void b() { cout b of X endl; }
virtual void c() { a();b();}
};
class Y : public X {
public : void a() { cout a of Y endl; }
void c() { b(); a(); }
}
class Z : public Y {
public : void b() { cout b of Z endl;}
void c() { b(); a();}
};
X x1; Z z1;
x1 = z1; x1.c();
X *ap = new Y; ap-c();
ap = new Z; ap-c();
결과: a of X
b of X
a of Y
b of X
b of Z
a of Y
여기서 virtual의 특성과 부모메서드를 호출하는지 자식을 호출하는지는 이해가 갑니다.
근데 c언어를 중심으로 공부한 저라 객체지향공부를 해도 이해가 정말 안가네요..
Q1.제가 이해한대로 표현이 맞나 보고 틀린점을 지적해주세요.
X의 틀을 가진변수 x1와 Z의 틀을 가진 변수 z1을 선언합니다.
여기서 new가 없으므로 객체는 생성되지 않았습니다.
x1 변수가 z1을 참조합니다..(솔직히 이 부분이 이해가 잘 안갑니다.그림으로 간단히 설명을 해주세요 ㅠㅠ)
X형의 포인터변수 ap를 선언후 Y형을 가리키는???.....제 한계입니다.
그렇다고 저 부분을 공부안한것도 아닌데 딱 개념이 잡히지 않습니다...
Q2. X x1같이 선언해서 x1.c()와 X *ap선언후 ap-c(); 의 차이가 뭔지...
Q3. 자바는 포인터의 개념이 없다고 했는데, 소스를 이해하려면 화살표로 그림그려서 하거든요..
왜 포인터가 없다고 하는건가요?3가지 질문에 대한 답변 다 안달아도 됩니다..ㅠ;
1개 답변이라도 이해가기 쉽게 부탁드립니다.