코딩/cpp
[TIPS] Overloading Function (2)
by 적막한숲
2025. 10. 3.
(1)번을 올리고 나서 잠깐 생각해보니, default parameter가 2개 있으면 어떻게 되는지가 궁금해졌다.
시행해 본 결과 default parameter가 2개 있어도 error가 발생한다.
#include <iostream>
#include <string>
class PrintData {
public:
void print(int i) {std::cout<<i<<std::endl;}
void print(double f = 3.14) {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;
}
====================[ 빌드 | 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: call of overloaded ‘print()’ is ambiguous
19 | pd.print();
| ~~~~~~~~^~
/home/server1/cpp_study/overloadingFunction/main.cpp:8:10: note: candidate: ‘void PrintData::print(double)’
8 | void print(double f = 3.14) {std::cout<<f<<std::endl;}
| ^~~~~
/home/server1/cpp_study/overloadingFunction/main.cpp:9:10: note: candidate: ‘void PrintData::print(std::string)’
9 | void print(std::string s = "NO Data") {std::cout<<s<<std::endl;}
| ^~~~~
ninja: build stopped: subcommand failed.
결론 >
overloading function은 parameter에 영향을 받는데,
같은 parameter에 따라 (타입, 타입 별 개수) 하나의 function으로 할당된다.
그리고 default parameter가 존재할 경우 arugment를 넣지 않으면 default parameter가 있는 함수로 실행된다.
그런데 default parameter가 두개 존재하면 error가 발생한다.