일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- stream
- Class
- public
- APP
- Contour
- wpf
- flutter
- Barcode
- parameter
- aduino
- Pointer
- sensor
- java
- Binary
- digitalRead
- compare
- memory
- UNO
- SERIAL
- Encapusulation
- Overloading
- Unity
- Read
- file access
- length
- atmega328
- mfc
- Android
- inheritance
- preprocessing
- Today
- Total
폴크(FOLC)
C++ 오버로딩/오버라이딩 본문
# 오버로딩 ( overloading )
> 함수의 이름을 동일(중복)하게 정의 하는것 ( 객체지향 - 다형성 )
> 함수의 이름은 1개만 선언 가능하지만 시그니처가 다르면 가능
- 시그니처 : 함수 선언부에 명시되어 있는 매개변수 리스트
-> 함수 이름의 종류를 최소화 하여 생성 가능
-> 함수 호출시에 매개변수나 타입을 신경쓰지 않고 호출 가능
# 조건
> 함수 이름이 같아야 한다.
> 매개변수 개수와 타입이 달라야 한다.
- 반환 타입이 다르더라도 시그니처가 같다면 정의 할 수 없다.
# 소스 코드
# include <iostream>
class TEST
{
public:
void SUM(int a, int b)
{
return (a + b);
}
float SUM(float a, float b)
{
return (a + b);
}
};
int main()
{
TEST tt;
tt.SUM(10, 20); // 정수형
tt.SUM(10.0, 20.0); // 실수형
return 0;
}
# 오버라이딩 ( overriding )
> 상속 관계에서 부모 클래스에 정의된 함수를 자식 클래스에서 다시 정의 하는것 ( 객체지향 - 다형성 )
-> 자식 클래스는 부모 클래스의 정보를 상속 받음 ( private 멤버 제외 )
-> 자식 클래스는 상속 받은 함수 그대로 사용해도 되고 필요한 함수만 다시 정의 가능
# 조건
> 함수의 내용만을 다시 정의 하는 것이므로, 선언부는 그대로 사용해야 한다.
- 반환 타입은 형 변환이 가능하다면 변경 가능
> 함수에 설정된 접근 지정 제어자를 더 작은 범위로 변경 할 수 없다.
> 함수에 설정된 예외 범위를 더 크게 변경 할 수 없다.
# 유의사항
> 재정의 작업을 진행하기 위해서는 virtual 키워드를 이용한다.
# 소스 코드
# include <iostream>
class TEST
{
public:
virtual void show_data()
{
return _T("TEST 메소드!");
}
};
class TEST_sub : public TEST
{
public:
virtual void show_data() override
{
return _T("TEST sub 메소드!");
}
};
int main()
{
TEST tt = new TEST;
tt.show_data(); // TEST 메소드!
TEST_sub tt_sub = new TEST_sub;
tt_sub.show_data(); // TEST sub 메소드!
TEST tt2 = new TEST_sub;
tt2.show_data(); // TEST sub 메소드!
return 0;
}
'교육 관련 > C++' 카테고리의 다른 글
C++ 정적/상수 멤버 (0) | 2022.05.02 |
---|---|
C++ 프렌드 (0) | 2022.04.19 |
C++ 소멸자 (0) | 2022.04.01 |
C++ 기본/복사 생성자 (0) | 2022.03.31 |
C++ 생성자 및 this 포인터 (0) | 2022.03.29 |