2014. 11. 24. 14:29

C컴파일러와, C++컴파일러가 호출하고자 하는 함수를 찾을때 참조하는 정보가 다르기 때문이다!!


* C 컴파일러 ( 함수 오버로딩 x )

 함수의 이름

C컴파일러는 호출하고자 하는 함수를 찾을 때 오로지 함수의 이름 정보만을 갖고 찾기 때문에 정의된 매개 변수의 형태가 달라도 동일한 이름의 함수 정의는 허용하지 않는다.


#overC.c

  1 #include <stdio.h>

  2

  3 int function(void)

  4 {

  5     return 0;

  6 }

  7 int function(int a, int b)

  8 {

  9     return a+b;

 10 }

 11

 12 int main()

 13 {

 14     function();

 15     function(1,2);

 16     return 0;

 17 }


$ gcc overC.c

overC.c:7: error: conflicting types for ‘function’

overC.c:3: note: previous definition of ‘function’ was here

overC.c: In function ‘main’:

overC.c:14: error: too few arguments to function ‘function’





* C++ 컴파일러 ( 함수 오버로딩O)

  함수의 이름 + 매개 변수의 정보

C++컴파일러는 호출하고자 하는 함수를 찾을 때 함수의 이름뿐만 아니라 매개 변수의 정보까지도 참조를 한다. 

즉 C++은 이름이 같고 매개 변수의 타입 혹은 개수가 다른 함수들의 정의를 허용한다.

 => 이를 함수 오버로딩이라고 한다!

#include <iostream>


int function(void)

{

    return 0;

}

int function(int a, int b)

{

    return a+b;

}


int main()

{

    function();

    function(1,2);

    return 0;

}

$ g++ -o overCPP overCPP.cpp

문제없이 동작한다.


출처 : 열혈강의 C++프로그래밍(윤성우저) 참고

Posted by Triany