노력과 삽질 퇴적물

OOP: 다형성 본문

프로그래밍note/언어. C&C++ 계열

OOP: 다형성

알 수 없는 사용자 2011. 7. 23. 23:55
객체지향 프로그래밍(OOP) = 캡슐화 + 다형성 + 상속



다형성?
=> 클래스내 함수들 이름이 같아도 반환타입이나 입력_인수가 다르면, 함수들의 동작은 각각 다르다.
ex. int    printSum (int a, int b);
      float printSum (float a, float b);
      void printSum (int n);
      void printfSum ();








1. 오버로드

-> 함수명은 같아도, 반환값이나 인수값(매개변수)의 자료형이 다르다. [동명이형]
-> 입력되는값을 거의 자동으로 인수값이 맞는 함수에 넣음.
-> 오버라이드와는 다르다. 오버라이드는 상위 클래스 메소드(함수)를 하위 클래스에서 재정의 하는것.

#include <iostream>

using namespace std;

int   function(int    number);
float function(float number);


int main()
{
float in = 0;
int type_size = 0;
int result_i = 0;
float result_f = 0;


cout << "정수나 실수를 입력하시오: ";
cin >> in;
type_size = sizeof(in);

if ( in != (int) in ) //float인지 체크
{
result_f = function(in); // float result_f
cout << "\t(float) 2 * " << in << " == " << result_f << endl;
 }
else if ( in == (int) in) //int인지 체크
{
result_i = function(in); // int result_i
cout << "\t(int) 2 * " << in << " == " << result_i << endl;
 }
else
{
function();
}


return 0;
}



int function(int number)
{
int r = 0;
r = number * 2;

return r;
}
float function(float number)
{
float r = 0;
r = number * 2;

return r;
}




2. 함수템플릿(*.cpp 한정)

//template <class class_t>
template <typename datatype_usr>

datatype sum(datatype_usr a, datatype_usr b)
{
return (a + b);
} // 다형성처럼, 자료형과 표현하는 방식이 달라도 기본적인 처리법이 같을때 유용.