C++

C++ 정적바인딩, 동적바인딩

pepega 2021. 10. 21. 16:40

정적바인딩

컴파일 시 이미 정해진 주소

동적바인딩

컴파일 시 함수를 호출할 때 결정

virtual

붙힐 경우 자식 클래스에 같은 함수가 있으면 자식 클래스 함수 호출

 

정적바인딩

//StaticBinding.cpp

#include <iostream>
using namespace std;

class Parents
{
    public:
    void myFunc() //자식 클래스에 같은 함수가 있는경우
                  //부모 클래스의 함수 호출 (virtual 키워드 없음)
    {
        cout << "I am Parents function!" << endl;
    }
};

class FirstChild : public Parents
{
    public:
    void myFunc()
    {
        cout << "I am FirstChild function!" << endl;
    }
};

class SecondChild : public Parents
{
    public:
    void myFunc()
    {
        cout << "I am SecondChild function!" << endl;
    }
};

int main()
{
    Parents p1; //정적바인딩
    p1.myFunc();
    
    Parents p2; //정적바인딩
    p2.myFunc();
    
    Parents p3; //정적바인딩
    p3.myFunc();
    
    return 0;
}

g++ -o StaticBinding StaticBinding.cpp
./StaticBinding
I am Parents function!
I am Parents function!
I am Parents function!

 

 

동적바인딩

//DynamicBinding.cpp

#include <iostream>
using namespace std;

class Parents
{
    public:
    virtual void myFunc() //자식 클래스에 같은 함수가 있는경우
                          //자식 클래스의 함수 호출
    {
        cout << "I am Parents function!" << endl;
    }
};

class FirstChild : public Parents
{
    public:
    void myFunc()
    {
        cout << "I am FirstChild function!" << endl;
    }
};

class SecondChild : public Parents
{
    public:
    void myFunc()
    {
        cout << "I am SecondChild function!" << endl;
    }
};

int main()
{
    Parents *p1 = new Parents; //동적바인딩
    p1->myFunc();
    
    Parents *p2 = new FirstChild; //동적바인딩
    p2->myFunc();
    
    Parents *p3 = new SecondChild; //동적바인딩
    p3->myFunc();
    
    delete p1;
    delete p2;
    delete p3;
    
    return 0;
}

g++ -o DynamicBinding DynamicBinding.cpp
./DynamicBinding
I am Parents function!
I am FirstChild function!
I am SecondChild function!

//출처
//https://ziscuffine.tistory.com/27

 

출처

https://ziscuffine.tistory.com/27

 

C++ 가상함수 / 추상 Class / Template

- 가상 함수 - 동적 바인딩을 수행 - virtual 키워드를 붙여 정의된 함수 virtual을 붙힌 상태에서 자식 클래스에 같은 함수가 있다면 자식클래스에 있는 함수를 호출한다. 부모클래스 포인터를 만든

ziscuffine.tistory.com

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzarg/cplr139.htm

 

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

C++ 클래스 구현, 상속, 자동차 예제  (0) 2021.10.21
C++ 상속 관계 구조 구현 (학생 예제)  (0) 2021.10.21