*<์น์ด๋จน๋ C++>์ ๋ณด๋ฉฐ ๊ณต๋ถํ์ฌ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
1. ํจ์ ์ค๋ฒ๋ก๋ฉ(Overloading)์ด๋?
- ๋์ผํ ์ด๋ฆ์ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์ ํ์ , ๋งค๊ฐ๋ณ์์ ๊ฐ์์ ๋ฐ๋ผ ๊ตฌ๋ถํ์ฌ ์ฌ๋ฌ ๊ฐ ์์ฑ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ๋น์ทํ ๊ธฐ๋ฅ์ธ๋ฐ ํจ์ ์ด๋ฆ์ด ๊ฐ๊ฐ ๋ฌ๋ผ, ๊ฐ๋ณ์ ์ผ๋ก ๊ธฐ์ตํ ์๊ณ ๊ฐ ์์ด์ ธ์ ํธ๋ฆฌํฉ๋๋ค.
- ํจ์์ ๋ฆฌํด ํ์ ์ผ๋ก๋ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๋, ๋ฆฌํด ํ์ ๋ง ๋ค๋ฅด๊ณ ๋งค๊ฐ๋ณ์๊น์ง ๋๊ฐ์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ
#include <iostream>
// ํจ์ ์ค๋ฒ๋ก๋ฉ
int Add(int x, double y) { return x + y; }
int Add(int x, int y) { return x + y; }
double Add(double x, double y) { return x + y; }
// int Add(double x, double y)๋ double Add(double x, double y)๊ฐ ์์ด์ ๋ถ๊ฐ๋ฅ
int main() {
int num1 = Add(3, 5);
int num2 = Add(3, 5.5);
double num3 = Add(3.5, 6.5);
std::cout << num1 << std::endl; // 8
std::cout << num2 << std::endl; // 8.5
std::cout << num3 << std::endl; // 10.0
}
2. C++ ์ปดํ์ผ๋ฌ์์ ํจ์๋ฅผ ์ค๋ฒ๋ก๋ฉํ๋ ๊ณผ์
- ํจ์์ ์๊ธฐ ์์ ๊ณผ ํ์ ์ด ์ ํํ ์ผ์นํ๋ ํจ์๋ฅผ ์ฐพ๋๋ค.
- 1๋ฒ์์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ ํ๋ณํ์ ํตํด ์ผ์นํ๋ ํจ์๋ฅผ ์ฐพ๋๋ค.
- char, unsigned char, short → int๋ก ๋ณํ
- unsigned short๋ int์ ํฌ๊ธฐ์ ๋ฐ๋ผ int ๋๋ unsigned int๋ก ๋ณํ
- float → double๋ก ๋ณํ
- enum → int๋ก ๋ณํ
- 1, 2๋ฒ์์๋ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์ข ๋ ํฌ๊ด์ ์ธ ํ๋ณํ์ ํตํด ์ผ์นํ๋ ํจ์๋ฅผ ์ฐพ๋๋ค.
- ์์์ ์ซ์(numeric) ํ์ ์ ๋ค๋ฅธ ์ซ์ ํ์ ์ผ๋ก ๋ณํ (float → int)
- enum ๋ํ ์์์ ์ซ์ ํ์ ์ผ๋ก ๋ณํ (enum → double)
- 0์ ํฌ์ธํฐ ํ์ ์ด๋ ์ซ์ ํ์ ์ผ๋ก ๋ณํ๋ 0์ ํฌ์ธํฐ ํ์ ์ด๋ ์ซ์ ํ์ ์ผ๋ก ๋ณํ
- ํฌ์ธํฐ๋ void ํฌ์ธํฐ๋ก ๋ณํ
- ์ ์ ์ ์๋ ํ์ ๋ณํ์ผ๋ก ์ผ์นํ๋ ํจ์๋ฅผ ์ฐพ๋๋ค.
์ ๊ณผ์ ์ ํตํ๋๋ผ๋ ์ผ์นํ๋ ํจ์๋ฅผ ๋ชป ์ฐพ๊ฑฐ๋, ๊ฐ์ ๋จ๊ณ์์ ๋ ๊ฐ ์ด์์ด ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ชจํธํ๋ค(ambiguous)๊ณ ํ๋จํ์ฌ ์ค๋ฅ ๋ฐ์์ํต๋๋ค.
#include <iostream>
int Add(int x, int y) { return x + y; }
int main() {
int x = 5;
char c = 'A';
int num = Add(x, c); // 1๋จ๊ณ์์ ์ฐพ์ง ๋ชปํด, 2๋จ๊ณ๋ก ๋์ด๊ฐ์ ์ค๋ฒ๋ก๋ฉ ์ ์ฉ
std::cout << num << std::endl;
}
int Add(int x, char y) ํจ์๋ ์๊ธฐ์, 1๋จ๊ณ์์ 2๋จ๊ณ๋ก ๋์ด๊ฐ์ต๋๋ค.
char → int ๋ก ํ๋ณํ ์งํ ํ, ๋ค์ ์ฐพ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ์๋ ์ฐพ์ ์ ์์๋ ๊ฑฐ์ฃ .
// ๋ชจํธํ ์ค๋ฒ๋ก๋ฉ
// ์ ์ ํ ์์๊ฐ ์์ด์ ์ฝ๋๋ฅผ ์ธ์ฉํ์ต๋๋ค.
#include <iostream>
void print(int x) { std::cout << "int : " << x << std::endl; }
void print(char x) { std::cout << "double : " << x << std::endl; }
int main() {
int a = 1;
char b = 'c';
double c = 3.2f;
print(a);
print(b);
// print(c); ๊ฐ์ ๋จ๊ณ์ ๋ ๊ฐ ์ด์์ ๊ฐ๋ฅํ ์ผ์น๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ
return 0;
}
print(c)์ ๊ฒฝ์ฐ, 1, 2๋จ๊ณ๋ฅผ ๋์ด์ 3๋จ๊ณ๊น์ง ์ด๋ฅด๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์์์ ์ซ์ ํ์ ์ผ๋ก ๋ณํ๋๊ธฐ์ double์ด int, char๋ก๋ ๋ณํ๋ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด void print(int x), void print(char x)์ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋จ๊ณ์์ ๋ ๊ฐ ์ด์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ฒ ๋์ฃ . ๋ฐ๋ผ์, ์ค๋ฅ๊ฐ ๋ ๊ฒ์ ๋๋ค.
'๐ฏ๏ธLanguage > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์ด๊ธฐํ ๋ฆฌ์คํธ(Initializer list), static (0) | 2022.02.09 |
---|---|
[C++] ๋ณต์ฌ ์์ฑ์(Copy constructor), ์์ ๋ณต์ฌ(Shallow Copy), ๊น์ ๋ณต์ฌ(Deep Copy) (0) | 2022.02.09 |
[C++] ์์ฑ์(Default Constructor) ์ฌ์ฉ ์ ์ฃผ์์ฌํญ (0) | 2022.02.08 |
[C++] ์ฐธ์กฐ์(Reference) (0) | 2022.02.08 |
[C++] ์ด๋ฆ๊ณต๊ฐ(namespace) ์ฌ์ฉ ์ ์ฃผ์์ฌํญ (0) | 2022.02.07 |