Class 상속에서 함수 호출 [Bottom] [Top]
- 파생 클래스에서 기본 클래스 호출 가능 여부
Base Class
public
protected
private
Derived
access
specifierpublic
O
O
X
protected
O
O
X
private
O
O
X
- 파생 객체로 외부에서 기본 클래스 호출 가능 여부
Base Class
public
protected
private
Derived
access
specifierpublic
O
X
X
protected
X
X
X
private
X
X
X
Class 상속에서 기본 인자값 처리 [Bottom] [Top]
1 class CBaseA 2 { 3 public: 4 virtual void Func( int nData = 1 ) 5 { 6 printf( "CBaseA::Func( %d )\n", nData ); 7 } 8 }; 9 10 class CDerivedB : public CBase 11 { 12 public: 13 void Func( int nData = 100 ) 14 { 15 printf( "CDerivedB::Func( %d )\n", nData ); 16 } 17 } 18 19 class CDerivedC : public CBase 20 { 21 public: 22 void Func( int nData ) 23 { 24 printf( "CDerivedC::Func( %d )\n", nData ); 25 } 26 } 27 28 // Main 함수 구현 29 int main() 30 { 31 CBaseA a; 32 CDerivedB b; 33 CDerivedC c; 34 35 CBaseA * p = &b; 36 37 a.Func(); 38 b.Func(); 39 c.Func(); // 컴파일 에러 (기본 인자값 없음) 40 p->Func(); 41 42 return 0; 43 }
위의 코드와 같이 가상 함수의 기본 인자값을 다르게 지정하는 경우, 해당 클래스의 기본 인자값을 사용한다. 실행 결과는 다음과 같다.
1 CBaseA::Func( 1 ) 2 CDerivedB::Func( 100 ) 3 CDerivedB::Func( 1 )
