정적바인딩
컴파일 시 이미 정해진 주소
동적바인딩
컴파일 시 함수를 호출할 때 결정
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
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 |