ํจ์ ์ค๋ฒ๋ก๋ฉ
C++์์ ๋ ๊ฐ์ ๋ค๋ฅธ ํจ์๋ ๋งค๊ฐ๋ณ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์์ ์๊ฐ ๋ค๋ฅด๊ฑฐ๋ ๋งค๊ฐ๋ณ์์ ์ ํ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
// overloading functions
#include <iostream>
using namespace std;
int operate (int a, int b)
{
return (a*b);
}
double operate (double a, double b)
{
return (a/b);
}
int main ()
{
int x=5,y=2;
double n=5.0,m=2.0;
cout << operate (x,y) << '\n';
cout << operate (n,m) << '\n';
return 0;
}
10
2.5
๋๊ฐ์ ํจ์๊ฐ ์์ง๋ง 2๊ฐ์ ํจ์๋ ์ด๋ฆ๋ง ๊ฐ๊ณ ์ ๋ฌ๋๋ ๊ฐ๋ค์ด ๋ค๋ฅธ ํํ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ ํ์ ํจ์๋ก ์๋ ํฉ๋๋ค.
ํด๋น ์ ๋ฌ ์ธ์์ ํ์ ์ ๋ง์ถ์ด ๊ฐ๊ฐ ์๋ง์ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
ํจ์ ํ ํ๋ฆฟ
์ค๋ฒ๋ก๋๋ ํจ์๋ ๋์ผํ ์ ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
// overloaded functions
#include <iostream>
using namespace std;
int sum (int a, int b)
{
return a+b;
}
double sum (double a, double b)
{
return a+b;
}
int main ()
{
cout << sum (10,20) << '\n';
cout << sum (1.0,1.5) << '\n';
return 0;
}
์ฌ๊ธฐ, sum๋ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์ ์ ํ์ผ๋ก ์ค๋ฒ๋ก๋๋์ง๋ง ์ ํํ ๋์ผํ ๋ณธ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
ํจ์ sum๋ ๋ง์ ์ ํ์ ๋ํด ์ค๋ฒ๋ก๋๋ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์ ํ์ด ๋์ผํ ๋ณธ๋ฌธ์ ๊ฐ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค. ์ด์ ๊ฐ์ ๊ฒฝ์ฐ C++์๋ ํจ์ ํ
ํ๋ฆฟ ์ด๋ผ๊ณ ํ๋ ์ ๋ค๋ฆญ ์ ํ์ผ๋ก ํจ์๋ฅผ ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค . ํจ์ ํ
ํ๋ฆฟ์ ์ ์ํ๋ ๊ฒ์ templateํค์๋์ ๊บพ์ ๊ดํธ <>๋ก ๋ฌถ์ธ ์ผ๋ จ์ ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์ ๊ฐ ์์ ์ค๋ ๊ฒ์ ์ ์ธํ๊ณ ์ผ๋ฐ ํจ์์ ๋์ผํ ๊ตฌ๋ฌธ์ ๋ฐ๋ฆ
๋๋ค
template <template-parameters> function-declaration
ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ์ผ๋ จ์ ๋งค๊ฐ๋ณ์์
๋๋ค. ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ class๋๋typenameํค์๋ ๋ค์์ ์๋ณ์๊ฐ ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์๋ณ์๋ ์ผ๋ฐ ์ ํ์ธ ๊ฒ์ฒ๋ผ ํจ์ ์ ์ธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ sumํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
template <class SomeType>
SomeType sum (SomeType a, SomeType b)
{
return a+b;
}
SomeType ํ์ ์ ํ ํ๋ฆฟ ํจ์ ๋ด๋ถ์์ ์ด๋ค ํ์ ์ผ๋ก๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐํ๊ฐ, ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์ ๋ฑ๋ฑ ์ด๋์์๋ ์ง ํด๋น ํ์ ์ ์ด์ฉํ์ฌ ํจ์๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด sum์์ ์ ์๋ ํจ์ ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ ์ ์์ต๋๋ค.
x = sum<int>(10,20);
sum<int>๋ ํจ์ ํ ํ๋ฆฟ์ ๊ฐ๋ฅํ ์ธ์คํด์คํ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค. ์ด ๊ฒฝ์ฐ intํธ์ถ์์ ํ ํ๋ฆฟ ์ธ์๋ก ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ ๊ฒ์ฒ๋ผ sumํจ์์ SomeType์ด intํ์ผ๋ก ๋์ฒด๋๋ ๋ฒ์ ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
int sum (int a, int b)
{
return a+b;
}
์ค์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
// function template
#include <iostream>
using namespace std;
template <class T>
T sum (T a, T b)
{
T result;
result = a + b;
return result;
}
int main () {
int i=5, j=6, k;
double f=2.0, g=0.5, h;
k=sum<int>(i,j);
h=sum<double>(f,g);
cout << k << '\n';
cout << h << '\n';
return 0;
}
์์ ์์์๋ ํจ์ ํ ํ๋ฆฟ์ sum๋ ๋ฒ ์ฌ์ฉํ์ต๋๋ค. ์ฒ์์๋ type ์ ์ธ์๋ฅผ int์ฌ์ฉํ๊ณ ๋ ๋ฒ์งธ๋ double ์ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค
์ปดํ์ผ๋ฌ๋ int ์ double ํ์ ์ ํจ์ 2๊ฐ๋ฅผ ์ธ์คํด์คํํ ๋ค์ ์ ์ ํ ๋ฒ์ ์ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ํธ์ถํฉ๋๋ค.
T result;
๋ฐํ๊ฐ๋ Tํ์ผ๋ก ์ปดํ์ผ์ด ์ด๋ฃจ์ด์ง๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ
ํ๋ฆฟ ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ <>๊บฝ์ ๋ก ํ์
์ ๋ช
์ํด์ค๋๋ค.
k = sum<int> (i,j);
h = sum<double> (f,g);
ํ์ง๋ง ํน์ ํ ๊ฒฝ์ฐ sum์ปดํ์ผ๋ฌ๋ ๊บพ์ ๊ดํธ ์์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ ์ ํ์ ์๋์ผ๋ก ์ถ๋ก ํ ์๋ ์์ต๋๋ค.
k = sum (i,j);
h = sum (f,g);
// function templates
#include <iostream>
using namespace std;
template <class T, class U>
bool are_equal (T a, U b)
{
return (a==b);
}
int main ()
{
if (are_equal(10,10.0))
cout << "x and y are equal\n";
else
cout << "x and y are not equal\n";
return 0;
}
์ด ์์์๋ ๋ค์์ ๋ํ ํธ์ถ์์ ์๋ ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์ ์ถ๋ก ์ ์ฌ์ฉํฉ๋๋ค are_equal.
are_equal(10,10.0)
๋ค์๊ณผ ๋์ผํฉ๋๋ค.
are_equal<int,double>(10,10.0)
์ ํ์ด ์๋ ํ ํ๋ฆฟ ์ธ์
ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ class๋๋ typename์ ์ํด ๋์ ๋ ์ ํ์ ํฌํจํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ํน์ ์ ํ์ ํํ์๋ ํฌํจํ ์ ์์ต๋๋ค.
// template arguments
#include <iostream>
using namespace std;
template <class T, int N>
T fixed_multiply (T val)
{
return val * N;
}
int main() {
std::cout << fixed_multiply<int,2>(10) << '\n';
std::cout << fixed_multiply<int,3>(10) << '\n';
}
fixed_multiplyํจ์ ํ ํ๋ฆฟ ์ ๋ ๋ฒ์งธ ์ธ์์ ํ์ int์ ๋๋ค. ์ผ๋ฐ ํจ์ ๋งค๊ฐ๋ณ์์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๋งค๊ฐ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ํจ์์ ๋ค๋ฅธ ์ธ์คํด์คํ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ฏ๋ก fixed_multiplyํด๋น ์ธ์์ ๊ฐ์ ๋ฐํ์ ์ค์ ์ ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค. (๋ณ์๋ฅผ ์ ๋ฌํ ์ ์์)
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DC์ ์ ๋ณด์์ (0) | 2022.09.06 |
---|---|
WinMain (2) | 2022.09.05 |
ํจ์ (0) | 2022.08.18 |
๋ช ๋ น๋ฌธ ๋ฐ ํ๋ฆ ์ ์ด (0) | 2022.08.18 |
๊ธฐ๋ณธ ์ ์ถ๋ ฅ (0) | 2022.08.17 |
๋๊ธ