티스토리 뷰

객체 지향 언어의 특징 중 하나인 다형성을 구현하는 방법

 

컴파일러 중 실행 중
funtion
overloading
operator
overloading
virtual funtion

1. 함수 오버로딩

  • C에서 기능이 같은데도 자료형에 따라 다른 이름의 함수를 사용함
  • C++에서는 하나의 함수 이름을 중첩(오버로딩)해서 사용 가능

< C에서는 불가능한 함수 오버로딩 >

// 두 개의 정수형 매개변수를 받아들여 더하는 함수
int add_i(int i, int j)
{
	return (i + j);
}

//두 개의 실수형 매개변수를 받아들여 더하는 함수
float add_f(float i, float j)
{
	return (i + j);
}

//두 개의 double형 매개변수를 받아들여 더하는 함수
double add_d(double i, double j)
{
	return (i + j);
}

 

< C++ 함수 오버로딩 - 매개변수의 자료형이 다른 경우 >

#include <iostream>
using namespace std;
int add(int i, int j)
{
	return (i + j);
}
float add(float i, float j)
{
	return (i + j);
}
double add(double i, double j)
{
	return (i + j);
}
int main()
{
	cout << add(1, 2) << endl;
	cout << add(1.3f, 2.6f) << endl;
	cout << add(6.5, 3.8) << endl;
	return 0;
}

< C++ 함수 오버로딩 - 매개변수의 개수가 다른 경우 >

#include <iostream>
using namespace std;
int add(int i, int j)
{
	return (i + j);
}
int add(int i, int j, int k)
{
	return (i + j + k);
}
int add(int i, int j, int k, int l)
{
	return (i + j + k + l);
}
int main()
{
	cout << add(1, 2) << endl;
	cout << add(1, 2, 3) << endl;
	cout << add(1, 2, 3, 4) << endl;
	return 0;
}

2. 생성자 중첩

  • 클래스의 멤버함수, 생성자 중첩 가능 / 소멸자 중첩 불가능
  • 생성자 함수도 매개변수를 가질 수 있기 때문에 매개변수의 자료형이나 개수에 따라 중첩 가능
  • 객체의 초기값을 다양하게 주기 위해 생성자 함수를 중첩 시키는 것!!

<생성자 중첩>

#include <iostream>
using namespace std;
class Dog {
private:
	int age;
public:
	Dog() { age = 1; } // 매개변수가 없는 생성자(자동 inline)
	Dog(int a) { age = a; } // 매개변수가 하나인 생성자
	~Dog() { cout << "소멸" << endl; }
	int getAge() { return age; }
	void setAge(int a) { age = a; }
};
int main()
{
	Dog happy(5), meri;
	cout << "해피:" << happy.getAge() << " 메리:" << meri.getAge() << endl;
	return 0;
}

해피는 5의 값이 있기 때문에 매개변수가 있는 생성자를 호출하고,

메리는 값이 없기 때문에 매개변수가 없는 생성자를 호출한다. (배열도 마찬가지)

 

3. 디폴트 매개변수

  • 함수를 호출할 때 매개변수를 전달하지 않아도 기본 값을 전달하도록 디폴트 값을 지정함
  • 디폴트 매개변수는 함수 중첩의 축약형
  • 디폴트 매개변수를 갖는 함수를 만들 때, 선언부에만 디폴트 매개변수를 지정해야 함
  • 디폴트 매개변수를 정의하기 시작하면 오른쪽의 매개변수들은 모두 디폴트 매개변수를 가져야 함

<디폴트 매개변수>

#include <iostream>
using namespace std;
int add(int i=1, int j=2) // 형식매개변수
{
	return(i + j);
}
int main()
{
	cout << add() << ","; // 실매개변수 없음, 1+2
	cout << add(10) << ","; // 실매개변수 한 개, 10+2
	cout << add(10, 20); // 실매개변수 두개, 10+20
	return 0;
}

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

[C++] 9. 상속  (0) 2021.11.23
[C++] 8. 연산자 오버로딩  (0) 2021.11.16
[C++] 5. const  (0) 2021.11.02
[C++] 4. 생성자와 소멸자  (0) 2021.10.19
[C++] 2. 클래스와 객체 만들기  (0) 2021.10.12
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday