반응형
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
#include <iostream>
 
using namespace std;
 
class A {
public:
     virtual void print() { cout << "에이" << endl; }
};
class B : public A {
public:
 virtual void print() { cout << "비" << endl; }
};
 
class C : public B {
public:
    virtual void print() { cout << "씨" << endl; }
};
 
/*참고로, 부모 클래스에서 멤버 함수 선언문 앞에 virtual 키워드가 존재한다면,
자식 클래스에서 오버라이딩(재정의, Overriding)한 함수도 저절로 가상 함수로 정의됩니다.
그러나, 소스 코드의 이해를 돕기 위해 자식 클래스에도 virtual를 명시해주어야 하는것이 관례입니다.
이번엔 순수 가상 함수(Pure Virtual Function)란 녀석을 살펴보도록 하겠습니다.
출처: http://blog.eairship.kr/175 [누구나가 다 이해할 수 있는 프로그래밍 첫걸음]*/
 
int main(void) {
 
    A* p;
    A* a = new A();
    a->print(); //a->A
    B* b = new B();
    b->print(); //b->B
    C* c = new C();
    c->print(); //c->C
    c =(C*) b;  
    c->print(); //c->B
    c = (C*)a;
    c->print(); //c->A
    p = a;
    p->print(); //(p=a)->A
    p = b;
    p->print(); //(p=b)->B
    p = c; 
    p->print(); //(p=c)->A
    
 
}
cs



virtual 을 쓰면 중요한 것은 원래 객체가 어떤 타입이냐!!이다.


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글

생성자 오버로딩의 디폴트 매개변수로의 변환  (0) 2017.12.25
생성자 중복 디폴트 매개 변수  (0) 2017.12.25
operator overloading  (0) 2017.11.14
모스 부호  (0) 2017.11.09
Book 클래스  (1) 2017.11.09

+ Recent posts