A sentimental robot

virtual function 본문

C++

virtual function

GOD03219 2018. 10. 1. 19:42
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
#include<iostream>
using namespace std;
 
 
class A {
 
public:
    void f1() {
 
        cout << "A f1()" << endl;
 
    }
};
 
class B :public A {
 
public:
 
    void f1() {
 
        cout << "B f1()" << endl;
 
    }
 
 
 
};
int main() {
 
    A * pa;
    A a;
    B b;
 
    pa = &a;
    pa->f1(); // A f1() 출력
 
    pa = &b;
    pa->f1(); // A f1() 출력
 
    // C++ 컴파일러는 가리키는 객체의 자료형을 기준으로 하는게 아닌, 포인터 변수의 자료형을 기준으로 한다.
    // 이러한 이유로 가상 함수를 쓴다.
 
 
}
 
cs

 

 

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
#include<iostream>
using namespace std;
 
 
class A {
 
public:
    virtual void f1() {
 
        cout << "A f1()" << endl;
 
    }
};
 
class B :public A {
 
public:
 
    void f1() {
 
        cout << "B f1()" << endl;
 
    }
 
 
 
};
int main() {
 
    A * pa;
    A a;
    B b;
 
    pa = &a;
    pa->f1(); // A f1() 출력
 
    pa = &b;
    pa->f1(); // B f1() 출력
 
    // 가상 함수로 선언되면 가르키는 객체의 자료형을 기준으로 호출
 
 
 
}
 
 
 
 
 
cs

 

< Pure virtual function >

 

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
#include<iostream>
using namespace std;
 
 
class A {
 
public:
    virtual void f1()=0// 순수 가상 함수 : 선언만 있다, 자식 클래스에서 반드시 재정의해야함
 
};
 
class B :public A {
 
public:
 
    void f1() { // 순수 가상 함수는 자식 클래스에서 반드시 오버라이딩 되어야함
 
        cout << "B f1()" << endl;
 
    }
 
 
 
};
int main() {
 
    
    // A a; 순수 가상 함수를 가지고 있기 때문에 추상클래스이다, 객체를 만들 수 없다.
    A * pa; // 추상클래스 포인터 선언 가능
    B b;
 
    pa = &b;
    pa->f1(); // B f1() 출력
 
    pa = new B;
    pa->f1();  // B f1() 출력
 
 
 
}
 
 
 
 
 
cs

'C++ ' 카테고리의 다른 글

Template  (0) 2018.10.02
순수 가상함수  (0) 2018.10.02
상속  (0) 2018.10.01
가상상속  (0) 2018.10.01
연산자함수 오버로딩 예제  (0) 2018.09.21