설계 모드 작업 1
4412 단어 디자인 모드
2. 적당 한 디자인 과 해당 하 는 코드 를 제시 합 니 다. 꺼 낼 수 없 는 상자 에 만 넣 을 수 있 고 최대 8 개의 과일 을 넣 을 수 있 으 며 하루 에 넣 을 수 있 는 것 은 아니다.과일 은 사과 와 귤 두 가지 일 뿐 상자 앞 에 넣 은 원 초적 인 무 게 는 각각 50 과 30 으로 상자 에 넣 은 후 수분 을 잃 어 버 려 무게 가 줄 어 들 었 고 사과 와 귤 은 매일 각각 4 와 3 을 줄 여 각자 의 원 초적 인 무게 의 3 / 5 에 이 르 렀 을 때 까지 무 게 를 줄 이지 않 았 다.상자 의 기능 은 다음 과 같다. 상자 에 있 는 사과 의 수 출력 하기;상자 에 있 는 귤 의 수 출력 하기;하루 동안 상자 에 들 어 있 는 과일 이 줄 어 든 총 무 게 를 출력 합 니 다.현재 과일의 총 무 게 를 수출 하 다.
1.
class Box;
class Role {
public:
Role(int theMoney,int theHP):money(theMoney),hp(theHP) { }
virtual ~Role( ) {}
int GetMoney( ) const { return money;}
void SetMoney(int m) { money = m; }
void Open (Box& aBox) { aBox.BeOpened(*this); }
virtual void PoisonHurt( ) = 0;
protected:
int money;
int hp;
};
class Solider:public Role {
public:
Solider(int theMoney,int theHP):Role(theMoney,theHP) { }
virtual void PoisonHurt( ) {
hp *=0.9;
money *=1.2;
}
};
class Mage:public Role {
public:
Mage (int theMoney,int theHP):Role(theMoney,theHP) { }
virtual void PoisonHurt( ) {
hp *=0.7;
money *=1.4;
}
};
class Box {
public:
virtual ~Box( ) {}
virtual void BeOpened(Role& role) = 0;
};
class MoneyBox:public Box {
public:
MoneyBox(int m):boxMoney(m) { }
virtual void BeOpened(Role& role) {
role.SetMoney(role.GetMoney( ) + boxMoney );
boxMoney = 0;
}
protected:
int boxMoney;
};
class PoisonBox:public Box {
public:
virtual void BeOpened(Role& role) { role. PoisonHurt ( ); }
};
2.
class Fruit
{
public:
Fruit(int mMax =0,int mMin=0,int mLose = 0,int mW = 0)
:mMaxWeight(mMax),mMinWeight(mMin),mLoseWeight(mLose),mWeigth(mW) {}
virtual ~Fruit() {}
virtual Fruit * Clone( ) const = 0;
virtual int ReduceWeight( );
virtual int Weight( ) const;
protected:
int mMaxWeight;
int mMinWeight;
int mLoseWeight;
int mWeight;
};
int Fruit::ReduceWeight( )
{
int newWeight = mWeight - mLoseWeight;
if (newWeight < mMinWeight )
newWeight = mMinWeight;
int reduce = mWeight - newWeight;
mWeight = newWeight;
return reduce;
}
int Fruit::Weight( ) const
{
return mWeight;
}
class Apple:public Fruit
{
public:
Apple():Fruit(50,50*3/5,4,50) { }
virtual ~Apple( ) {}
virtual Apple * Clone() const
{ return new Apple(*this); }
// other
};
class Orange:public Fruit
{
public:
Orange():Fruit(30,30*3/5,3,30) { }
virtual ~Orange( ) {}
virtual Orange * Clone() const
{ return new Orange(*this); }
// other
};
class Box
{
public:
Box():count(0) {for(int i=0;i<8;i++) fruit[i]=0;}
~Box() {for(int i=0;i<8;i++) delete fruit[i];}
void AddFruit(Fruit& one) //
{
if (count<8)
fruit[count++]=one.Clone();
}
int ApplesNum() const
{
int num=0;
for(int i=0;i<8;i++) {
Apple * p=dynamic_cast(fruit[i]);
if (p)
++num;
}
return num;
}
int OrangesNum() const
{
int num=0;
for(int i=0;i<8;i++) {
Orange * p=dynamic_cast(fruit[i]);
if(p)
++num;
}
return num;
}
int PassOneDay() //
{
int num=0;
for(int i=0;i<8;i++)
if(fruit[i])
num+=fruit[i]->ReduceWeight();
return num;
}
int TotalWeight() const
{
int num=0;
for(int i=0;i<8;i++)
if(fruit[i])
num+=fruit[i]->Weight();
return num;
}
void Show() const
{
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.