Coding/C & C++

C/C++ 함수 오버로딩 vs 함수 오버라이딩

heyoon2j 2020. 1. 31. 17:05

 C/C++ 함수 오버로딩 vs 함수 오버라이딩

ㆍ 함수 오버로딩

- 동일한 이름의 함수 정의를 허용하는 것

 

ex>

int funcOverloading(int num)

{

    num++;

    return num;

}

 

int funcOverloading(int a, int b)

{

    return a+b;

}

 

- C++은 함수를 호출할 때, '함수의 이름'과 '매개변수의 선언' 정보를 가지고 찾는다.

=> 그렇기 때문에 함수 오버로딩을 위해서는 매개변수의 반환형이나 개수를 다르게 해야 한다.

 

 

ㆍ 함수 오버라이딩

- 상속에서 사용된다.

- 하위 클래스에 상위 클래스와 동일한 이름과 형태의 함수를 선언하게 되면, 상위 클래스의 함수는 하위 클래스 함수에 의해 가려진다.

- 하위 클래스에서 상위 클래스의 오버라이딩 된 함수를 호출할 때는 "상위 클래스::오버라이딩 된 함수"로 호출하면 된다.

=> 하위 클래스 내부에서 호출: PermanentWorker::GetPay()

=> 외부에서 하위 클래스를 통해 호출: SalesWorker 변수.PermanentWorker::GetPay()

 

ex>

class PermanentWorker : public Employee

{

private:

     int salary;

public:

     PermanentWorker(char* name, int money)

         : Employee(name), salary(money)

     {     }

     int GetPay() const

     {

         return salary;

     }

     void ShowSalaryInfo() const

     {

         ShowYourName();

     }

};

 

class SalesWorker : public PermanentWorker

{

private:

     int salesResult;

     double bonusRatio;

public:

     SalesWorker(char* name, int money, double ratio)

         : PermanentWorker(name, money), salesResult(0), bounusRatio(ratio)

     {     }

     void AddSalesResult(int value)

     {

         salesResult+=value;

     }

     int GetPay() const

     {

        return PermanentWorker::GetPay() + (int)(salesResult*bonusRatio);

     }

     void ShowSalaryInfo() const

     {

         ShowYourName();

     }

}; 

 

 

'Coding > C & C++' 카테고리의 다른 글

C/C++ 파일 분할과 헤더 파일의 디자인  (0) 2020.02.18
C/C++ 구조체(struct, class)  (0) 2020.02.18
C/C++ 배열과 포인터  (0) 2020.01.11
C/C++ 입출력  (0) 2020.01.04
C/C++ 변수와 상수, 데이터 표현  (0) 2020.01.03