함수 오버로딩
: 함수 이름은 같으나 함수의 매개변수는 다르게 정의하는 것
함수오버로딩 예제 |
// 함수 오버로딩 #include <iostream> using namespace std;
class TwoNumber { public: TwoNumber(); int AddNumber(const int ia, const int ib); double AddNumber(const double da, const double db); private: int i_sum; double d_sum; };
TwoNumber::TwoNumber() { i_sum = 0; d_sum = 0; }
int TwoNumber::AddNumber(const int ia, const int ib) { i_sum = ia + ib; return i_sum; }
double TwoNumber::AddNumber(const double da, const double db) { d_sum = da + db; return d_sum; }
int main() { TwoNumber obj1;
/* 함수 오버로딩 : 함수 인자만 다르고 구별할수 있는 경우*/
// 정수형 함수가 선택됨 cout << "3+4 = " << obj1.AddNumber(3,4) << endl;
// 실수형 함수가 선택됨 cout << "3.5 + 4.6 = " << obj1.AddNumber(3.5, 4.6) << endl; return 0; }
: 매개변수의 형태에 따라서 호출되는 함수가 달라진다.
|
함수오버라이딩
: 기반클래스의 멤버함수를 파생클래스에서 다시 정의하는 것
동적결합( Dynamic Binding )
: 프로그램의 실행 or 컴파일시 어떤 함수가 호출될지 결정을하여 적당한 멤버를 참조하는 것
이렇게 하나의 함수가 여러가지 구현형태로 정의되는 것을 다형성(Polymorphism) 이라한다.
함수 오버라이딩 예제 |
// 함수 오버라이딩 #include <iostream> using namespace std;
class SMARTBASE { public: void K() { cout << "SMARTBASE Class"; } };
class SMART : public SMARTBASE { public: void K() { cout << "SMART Class"; } };
int main() { SMART obj;
// 본인의 K 함수가 우선 ( 오버라이딩 ) obj.K(); // 스코프 연산자를 사용하면 접근이 둘다 가능하다. obj.SMART::K(); return 0; } : 기반클래스에 있는 이름과 인자가 동일한 함수가 상속받은 파생클래스에 존재시, 스코프 연산자를 이용해 두 함수를 구분해서 호출이 가능하다. |
함수 오버라이딩 예제 ( virtual 포함 ) |
// 함수 오버라이딩 수정 후 소스 #include <iostream> using namespace std;
class A { public: virtual string ClassMessage() // 가상함수 { return "Class A"; } };
class B : public A { public: string ClassMessage() // 함수 오버라이딩 { return "Class B"; // return 문자열, string 객체 } };
void TestFunction1(A &x) { // x.ClassMessage() 스트링 객체 cout << x.ClassMessage().data() << endl; }
int main() { A a; B b; TestFunction1(a); TestFunction1(b);
return 0; }
: 다른형태로 다형성에 의해 함수를 재정의 하기 위해서는 가상함수(virtual function)를 선언하면 된다.
기반클래스의 멤버 앞에 virtual 을 추가시킨다. |
결과사진
: 함수 오버로딩을 통해서 호출한 매개변수의 차이점 과 함수 오버라이딩을 통해서 실행에서 원하는 멤버 함수를 찾아
호출 되는 것을 확인 할 수 있다.
실습소스
131120_Src_12-1.cpp
131120_Src_12-2.cpp
131120_Src_12-3.cpp
131120_Src_12-3.exe