도슐랭스타
C++ - 함수중첩(Function Overloading) 본문
객체지향 언어의 특징
- 캡슐화 : 외부에서 직접 수정하거나 접근하지 못하게 하여 객체의 안정성을 유지하는 것.
- 상속 : 한 클래스의 속성과 메서드를 다른 클래스가 받아 사용할 수 있도록 하는 것.
- 다형성 : 하나의 인터페이스나 클래스를 여러 형태로 사용할 수 있게 하는 것.


함수 중첩(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 |