상속을 위한 조건
Programming/C++ 2012. 6. 19. 23:03 |IS - A 관계
상속으로 클래스의 관계를 구성하기 위해서는 조건이 필요하다. 그리고 조건과 그에 따른 필요가 충족되지 않으면, 상속은 하지 않는 것만 못하다.
상속을 위한 기본 조건인 IS-A 관계의 성립.
무선 전화기는 일종의 전화기 입니다.
무선 전화기 is a 전화기
노트북 컴퓨터는 일종의 컴퓨터입니다.
노트북컴퓨터 is a 컴퓨터
즉, 상속관계가 성립되려면 기초 클래스와 유도 클래스간에 IS-A 관계가 성립해야 한다. 만약에 이 상속관계로 묶고자 하는 두 클래스가 IS-A 관계로 표현되지 않는다면, 이는 적절한 상속의 관계가 아닐 확률이 매우 높은 것이니, 신중한 판단이 필요하다.
#include <iostream>
#include <cstring>
using namespace std;
class Computer
{
private:
char owner[50];
public:
Computer(char* name)
{
strcpy(owner, name);
}
void Calculate(void) const
{
cout<<"요청 내용을 계산합니다."<<endl;
}
};
class NotebookComp :public Computer
{
private:
int battery;
public:
NotebookComp(char* name, int chag)
: Computer(name), battery(chag)
{}
void Charging() {battery+=5;}
void UseBattery() {battery-=1;}
void MovingCal()
{
if(GetBatteryInfo() < 1)
{
cout<<"충전이 필요합니다."<<endl;
return;
}
cout<<"이동하면서 ";
Calculate();
UseBattery();
}
int GetBatteryInfo(void) {return battery;}
};
class TabletNotebook :public NotebookComp
{
private:
char penModel[50];
public:
TabletNotebook(char* name, int chag, char* pen)
:NotebookComp(name, chag)
{
strcpy(penModel, pen);
}
void Write(char* penInfo)
{
if(GetBatteryInfo() < 1)
{
cout<<"충전필요"<<endl;
return;
}
if(strcmp(penModel, penInfo) != 0)
{
cout<<"등록된 펜이 아니야"<<endl;
return;
}
cout<<"필기내용 처리한다"<<endl;
UseBattery();
}
};
int main(void)
{
NotebookComp nc("qwersd", 5);
TabletNotebook tn("sdfdfdd", 5, "123");
nc.MovingCal();
tn.Write("123");
return 0;
}
'Programming > C++' 카테고리의 다른 글
Control 클래스 & Entity 클래스 (0) | 2012.06.22 |
---|---|
상속을 이용한 프로그램 (0) | 2012.06.21 |
protected 선언과 세 가지 형태의 상속(public, protected, private) (0) | 2012.06.13 |
상속(inheritance) (0) | 2012.06.06 |
C++에서의 static (0) | 2012.05.30 |