코딩/cpp
[TIPS] overloading Function (1)
by 적막한숲
2025. 10. 3.
// 이 경우를 보면, parameter의 type, 갯수, 심지어 순서에 따라서 다른 함수다.
int add(int i, int j);
int add(int i);
int add(int i, double j);
int add(double j, int i);
// 이런식으로 하면 문제가 발생함. c++20 기준
int add(int x);
double add(int x);
#include <iostream>
#include <string>
class PrintData {
public:
void print(int i) {std::cout<<i<<std::endl;}
void print(double f) {std::cout<<f<<std::endl;}
void print(std::string s = "NO Data") {std::cout<<s<<std::endl;}
};
int main() {
PrintData pd;
pd.print(1);
pd.print(3.14);
pd.print("Hello World");
pd.print();
return 0;
}
반면, default paramter가 없고 pd.print()를 출력할 경우,
error가 발생한다. (c++ 20 기준)
#include <iostream>
#include <string>
class PrintData {
public:
void print(int i) {std::cout<<i<<std::endl;}
void print(double f) {std::cout<<f<<std::endl;}
void print(std::string s) {std::cout<<s<<std::endl;}
};
int main() {
PrintData pd;
pd.print(1);
pd.print(3.14);
pd.print("Hello World");
pd.print();
return 0;
}
====================[ 빌드 | overloadingFunction | Debug ]========================
/home/server1/.local/share/JetBrains/Toolbox/apps/clion/bin/cmake/linux/x64/bin/cmake --build /home/server1/cpp_study/overloadingFunction/cmake-build-debug --target overloadingFunction -j 22
[1/2] Building CXX object CMakeFiles/overloadingFunction.dir/main.cpp.o
FAILED: CMakeFiles/overloadingFunction.dir/main.cpp.o
/usr/bin/c++ -g -std=gnu++20 -fdiagnostics-color=always -MD -MT CMakeFiles/overloadingFunction.dir/main.cpp.o -MF CMakeFiles/overloadingFunction.dir/main.cpp.o.d -o CMakeFiles/overloadingFunction.dir/main.cpp.o -c /home/server1/cpp_study/overloadingFunction/main.cpp
/home/server1/cpp_study/overloadingFunction/main.cpp: In function ‘int main()’:
/home/server1/cpp_study/overloadingFunction/main.cpp:19:13: error: no matching function for call to ‘PrintData::print()’
19 | pd.print();
| ~~~~~~~~^~
/home/server1/cpp_study/overloadingFunction/main.cpp:7:10: note: candidate: ‘void PrintData::print(int)’
7 | void print(int i) {std::cout<<i<<std::endl;}
| ^~~~~
/home/server1/cpp_study/overloadingFunction/main.cpp:7:10: note: candidate expects 1 argument, 0 provided
/home/server1/cpp_study/overloadingFunction/main.cpp:8:10: note: candidate: ‘void PrintData::print(double)’
8 | void print(double f) {std::cout<<f<<std::endl;}
| ^~~~~
/home/server1/cpp_study/overloadingFunction/main.cpp:8:10: note: candidate expects 1 argument, 0 provided
/home/server1/cpp_study/overloadingFunction/main.cpp:9:10: note: candidate: ‘void PrintData::print(std::string)’
9 | void print(std::string s) {std::cout<<s<<std::endl;}
| ^~~~~
/home/server1/cpp_study/overloadingFunction/main.cpp:9:10: note: candidate expects 1 argument, 0 provided
ninja: build stopped: subcommand failed.
이런 경우, void print() 함수를 새로 만들거나,
위 예시 처럼 default parameter를 만들어야 된다.