본문 바로가기
코딩/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가 발생한다.

'코딩 > cpp' 카테고리의 다른 글

[TWC 4.5Sota] Overloading vs. Overriding  (0) 2025.10.03
c++ 공부 track  (0) 2025.10.03
[TIPS] overloading Function (1)  (0) 2025.10.03
[백준] 30804번  (0) 2025.10.02
[백준] 21736번  (0) 2025.10.02