[Basic C++] #15 오버라이딩의 특수한 경우 세 번째

2022. 3. 26. 19:23· 언어/Basic C++
목차
  1. [Basic C++] #15_오버라이딩의 특수한 경우 세 번째

[Basic C++] #15_오버라이딩의 특수한 경우 세 번째

C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다.

"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.

 

 


 

private 또는 protected 가상 멤버 함수를 오버라이드 할 경우
class Times
{
public:
    virtual int getTimesResult() const
    {return getDeafualtOperand() * getInputOperand;}	// 디폴트 Operands 값 * 인자로 들어온 operands
    
    void setInputOperand (int i) {inputOperand = i;}
    void getInputOperand () {reutrn inputOperand;}

private:
    int inputOperand;
    virtual int getDefaultOperand() {return 5;}
}

class Times6 : public Times
{
private:
    virtual int getDefaultOperand() override { return 6; }	// 5 대신 6을 반환하도록 재정의
};

위 코드 예제를 살펴보겠습니다.

책에 나온 내용을 쉽게 각색한 내용이니 부자연스러워도 이해 부탁드립니다. 

먼저 Times 객체는 Default Operand 값을 5로 정의합니다.

"getTimesResult" public 멤버 함수는 인자로 들어온 Input Operand를 getDefaultOperand 멤버 함수가 반환하는 값과 곱셈 연산을 하여 결과 값을 반환합니다. 

이때, "getDefaultOperand" 가상 멤버 함수는 private 영역에 위치합니다.

파생 클래스 Times6 클래스는 이 가상 멤버 함수를 재정의 할 수 있으며, 5 대신 6을 반환하도록 재정의 합니다.

 

private 또는 protected로 접근 권한이 설정된 부모 클래스의 가상 함수도 오버라이딩이 가능합니다.

"점근 지정자(public, private, protected)"의 경우 누가 해당 메서드를 호출할 수 있는지 제한할 뿐, 

오버라이딩과 관련이 없습니다!

따라서, private 또는 protected 영역에 선언된 가상 함수를 파생 클래스에서 직접 호출할 수 없지만,

오버라이딩, 즉 재정의 하는 동작은 가능합니다.

이러한 구현 방법은 전반적인 변경이 필요하지 않고, 특정 속성만 변경이 필요할 때 private 또는 protected 가상 멤버 함수를 오버라이딩 하는 것이 좋습니다. 

 

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #17_오버라이딩의 특수한 경우 다섯 번째, 복제 생성자, 대입 연산자  (0) 2022.04.24
[Basic C++] #16_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값  (0) 2022.04.03
[Basic C++] #14 오버라이딩의 특수한 경우 두 번째  (0) 2022.03.25
[Basic C++] #13_오버로딩, static 함수의 오버로딩  (0) 2022.03.25
[Basic C++] #12 순수 가상 함수, 추상 클래스  (0) 2022.03.25
  1. [Basic C++] #15_오버라이딩의 특수한 경우 세 번째
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #17_오버라이딩의 특수한 경우 다섯 번째, 복제 생성자, 대입 연산자
  • [Basic C++] #16_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값
  • [Basic C++] #14 오버라이딩의 특수한 경우 두 번째
  • [Basic C++] #13_오버로딩, static 함수의 오버로딩
Hardii2
Hardii2
개발 블로그Hardii2 님의 블로그입니다.
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • BFS
  • BOJ
  • dfs
  • C++
  • 기술 질문
  • 그래프
  • set
  • 정렬
  • 최단 경로
  • unreal
  • DP
  • stl
  • 알고리즘
  • 우선순위 큐
  • Unreal Blueprint
  • 디자인 패턴
  • 트리
  • 개발
  • programmers
  • Effective C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #15 오버라이딩의 특수한 경우 세 번째
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.