1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <iostream> using namespace std; class A { public: A() { cout << "A생성" << endl; } ~A() { cout << "A파괴" << endl; } void P() { cout << "함수A-P" << endl; } }; class B : public A { public: B() { cout << "-B생성" << endl; } ~B() { cout << "-B파괴" << endl; } void P() { cout << "함수B-P" << endl; } void Q() { cout << "함수B-Q" << endl; } void F() { cout << "함수F" << endl; P(); } void G() { cout << "함수G" << endl; Q(); } }; class C : public B { public: C() { cout << "--C생성" << endl; } ~C() { cout << "--C파괴" << endl; } void P() { cout << "함수 C-P" << endl; } void Q() { cout << "함수 C-Q" << endl; } }; int main() { cout << "객체 C 생성" << endl; C test; cout << "C객체 F함수 호출" << endl; test.F(); return 0; } | cs |
걍 직접 해보는거 어렵지않잖음
해보면되지..
그러니까 B의 P를 불러오는거 아님? 거기 댓글이 세명인가 네명이 다 C꺼 불러온다길래
http://gall.dcinside.com/programming/603745
만들면서생각해봤는데 당연하다면 당연한거아닌가싶은게 가령 C에서 R이라는 함수를만들었다치자. F함수안에 R함수가 들어갈수있냐? 안되잖아? 마찬가지로 C의 P함수가 B의 F에서 호출될수 없는거아냐?
한가지더 A::P(); 식으로 B내에서 쓰는건 되지만 C::P();는 안되는데 이렇게까지해도안되는걸 굳이 내려가서 C의 P()를 쓸거같진않잖아
// B에서 virtual 로 소멸자랑 P에다가 값주면 C의 P값을 토해내지 않나?
ㄴ 먼말인지잘모르겠음 코드짜서올려주셈
그러니까 class B안에 있는 소멸자 ~B랑 함수 P 앞에다가 virtual 써서
virtual ~B virtual P 해주면 C꼐 나올거 아냐
virtual 따로해주지않는이상은 질문했던사람이 말한조건대로면 B에서 C의 P()에 접근할수가 없다는얘기였음.. C::P(); 같은식으로도.. 명시를해줘도 안되는데~ 라는
그럼 서로 같은말 하는거네 나는 저기에 애들이 다 C라고 달았길래 ㅋㅋ 내가 오버라이딩 잘못 아는줄