본문 바로가기

CS/C++

[C++]다형성(Polymorphism)

728x90

다형성(Polymorphism)은 OOP(Object Oriented Programming)에서 서로 다른 객체들 사이에서도 같은 함수에 대해서 각각이 다르게 동작하는 것입니다.


쉽게 예를 들어 설명하면, 동물은 모두 각각의 소리를 냅니다. 개는 멍멍하고 짖고, 고양이는 야옹~ 하면서 짖습니다. 객체지향적인 개념으로 생각하면 동물 클래스를 상속받은 개와 고양이는 모두 '짖다'라는 함수를 가지고 있는데 이 함수는 개인지 고양이인지에 따라 내용이 달라집니다. 여기서 동물은 모두 짖는다는 사실은 변하지 않습니다. 위와같은 구조를 그림으로 나타내면 아래의 그림과 같습니다.

동물 클래스는 짖는다는 사실은 모든 동물들에게 해당이 됩니다. 하지만 동물이 짖을수는 없습니다. 이러한 행위는 가상함수(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
#include <iostream>
using namespace std;
class animal{
public:
    virtual void Sound()=0;
};
 
class dog : public animal
{
public:
    //override
    virtual void Sound(){
        cout << "dog bark!" << endl;
    }
};
 
class cat : public animal
{
public:
    //override
    virtual void Sound(){
        cout << "cat ya~ong" << endl;
    }
};
 
int main(int argc, char** argv) {
    animal* mydog = new dog;
    animal* mycat = new cat;
    
    mydog->Sound();
    mycat->Sound();
    
    return 0;
}
cs

출력화면

 dog bark!

 cat ya~ong


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

[C++]템플릿(template)  (0) 2016.06.07
[C++]복사생성자(Copy Constructor)  (0) 2016.06.07
[C++]상속 접근 지시자  (0) 2016.06.07
[C++] 다중상속(Multiple inheritance)  (0) 2016.06.07