-
항목 35 : 가상 함수 대신 쓸 것들도 생각해 두는 자세를 ..@ 16. 1 ~ 17. 1/Effective C++ 2015. 1. 25. 14:49
비가상 함수 인터페이스(NVI 관용구)
가상 함수의 랩퍼라고들 함.
class A
{
private:
virtual int dohelath() const //가상함수를 private로 설정하고
{
int num=3;
return num;
}
public:
int health() const //가상함수를 랩퍼하는 함수
{//전에 할일을 넣을 수 있고
int val=dohelath(); //가상함수를 호출한다.//dohealth()가 끝난 뒤에 할일을 넣을 수 있다.
return val;
}
};class B : public A
{
public:
void showhealth()
{
cout << health() << endl;
}
virtual int dohelath() const //파생클래스에서 가상함수를 재정의함.
{
int num=4;
return num;
}
};
int main()
{
B a;
a.showhealth(); 직접적인 가상함수 호출대신 호출함.
getch();
return 0;
}* 어떤 기능을 어떻게 구현할지를 조정하는 것은 파생클래스에서하지만 함수를 언제 호출할 지를 결정하는 것은 기본 클래스가 결정(health()를 재정의할 수 없으니까)
'@ 16. 1 ~ 17. 1 > Effective C++' 카테고리의 다른 글
항목 37 : 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 변경금지 (0) 2015.01.25 항목 36 : 상속받은 비가상 함수를 파생클래스에서 재정의하지말것 (1) 2015.01.25 항목 10 : 대입 연산자는 *this의 참조자를 반환한다 (0) 2015.01.15 항목 9 : 객체 생성 및 소멸자에 절대로 가상 함수 호출 금지 (0) 2015.01.15 항목 7:가상 소멸자 (0) 2015.01.14