■ 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 |