반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

폴크(FOLC)

C++ 오버로딩/오버라이딩 본문

교육 관련/C++

C++ 오버로딩/오버라이딩

folcjin 2022. 4. 16. 12:22
728x90
반응형

# 오버로딩 ( 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;
}

728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --

'교육 관련 > 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