Notice
Recent Posts
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
관리 메뉴

도슐랭스타

C++ - 함수중첩(Function Overloading) 본문

C++

C++ - 함수중첩(Function Overloading)

도도.__. 2023. 11. 15. 11:55

객체지향 언어의 특징

  1. 캡슐화 : 외부에서 직접 수정하거나 접근하지 못하게 하여 객체의 안정성을 유지하는 것.
  2. 상속 : 한 클래스의 속성과 메서드를 다른 클래스가 받아 사용할 수 있도록 하는 것.
  3. 다형성 : 하나의 인터페이스나 클래스를 여러 형태로 사용할 수 있게 하는 것.

함수 중첩(function overloading)

  • 함수 오버로딩
  • 다형성을 구현하는 한 가지 방법
  • 매개변수의 타입이나 개수를 다르게 하여 같은 이름의 함수를 여러 개 만드는 것이다.
  • 컴파일러가 매개변수의 입력 자료형에 따라서 자동적으로 해당 함수를 연결해 준다.
  • C++에서는 함수 중첩이 가능하지만 C에서는 함수 중첩을 할 수 없다. 
//C
int add_i(int i, int j)
{
	return (i + j);
}
float add_f(float i, float j)
{
	return (i + j);
}
double add_d(double i, double j)
{
	return (i + j);
}
//C++, function overloading
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);
}
//C++, function overloading
int Min(int i, int j)
{
	return i < j ? i : j;
}
double Min(double i, double j)
{
	return i < j ? i : j;
}
char Min(char i, char j)
{
	return i < j ? i : j;
}

주의사항

int add(int i, int j)
{
	return (i + j);
}
double add(int i, int j)
{
	return ((double)i + (double)j);
}

컴파일러가 실매개변수의 입력 자료형에 따라서 자동적으로 해당 함수를 연결해 주기 때문에 매개변수의 자료형이 같으면 함수 중첩을 할 수 없다.

함수 중첩 예시

1) 매개 변수의 자료형이 다른 경우

#include <iostream>
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()
{
	std::cout<<add(1,2)<<std::endl;
	std::cout<<add(1.3f, 2.6f)<<std::endl;
	std::cout<<add(6.5, 3.8)<<std::endl;
	return 0;
}

2) 매개변수의 개수가 다른 경우

#include <iostream>
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()
{
	std::cout<<add(1,2)<<std::endl;
	std::cout<<add(1,2,3)<<std::endl;
	std::cout<<add(1,2,3,4)<<std::endl;
	return 0;
}

생성자 함수 중첩

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

매개변수의 개수에 따른 함수오버로딩이다.
가장 많이 쓰는 함수 중첩은 생성자 함수 오버로딩이다.

 

Online Python Tutor - visualize, debug, get AI help for Python, Java, C, C++, and JavaScript

Online Compiler, Visual Debugger, and AI Tutor for Python, Java, C, C++, and JavaScript Python Tutor helps you do programming homework assignments in Python, Java, C, C++, and JavaScript. It contains a unique step-by-step visual debugger and AI tutor to he

pythontutor.com

위의 사이트를 사용하면 이해하기 수월할 것이다.


도슐랭스타
★★★★☆ : 오 맛있다..!
C에서는 매개변수의 자료형만 달라도 다른 이름의 함수로 만들어야해서 기억하기도 힘들고 불편했다. 하지만 C++에서는 매개변수의 자료형이나 개수가 다르면 같은 함수이름을 사용해도 된다니!!! 역시 C보다 C++이 더 좋다.오예~

반응형

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

C++ - Overloading, Overriding  (1) 2023.11.18
C++ - Default Parameter  (0) 2023.11.15
C++ - const new  (0) 2023.11.08
C++ - 객체와 멤버 생성자 소멸자 this  (1) 2023.11.01
C++-구조체와 클래스  (0) 2023.10.18
Comments