본문 바로가기
코딩/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를 만들어야 된다.

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

c++ 공부 track  (0) 2025.10.03
[TIPS] Overloading Function (2)  (0) 2025.10.03
[백준] 30804번  (0) 2025.10.02
[백준] 21736번  (0) 2025.10.02
[백준] 18870번  (0) 2025.10.01