첫 번째 문제 해결
아래 답변에서 말했듯이, 나는 잘못 썼습니다.
#ifndef ICETOWER_H
#define ICETOWER_H
내 C ++ 코드에 여전히 문제가 있습니다.
기본 타워를 2 * 비용으로 아이스 타워로 업그레이드하기 위해 데코레이터 패턴을 구현했습니다. 그러나 내가 그것을 실행할 때 그것은 장식 된 후에도 두 타워에 대해 동일한 사양을 표시합니다. 누구나 내가 뭘 잘못했는지 알 수 있습니까?
다음은 파일입니다.
tower.h
#ifndef __TOWER_H__
#define __TOWER_H__
#include <iostream>
#include <string>
using namespace std;
class Tower {
private:
string type;
string effect;
int cost;
int sellTower;
int damage;
int range;
int rate;
public:
string getType() { return type; }
string getEffect() { return effect; }
int getCost() { return cost; }
int getSale() { return sellTower; }
int getDamage() { return damage; }
int getRange() { return range; }
int getROF() { return rate; }
Tower();
virtual ~Tower(){}
};
#endif __TOWER_H__
tower.cpp
#include "Tower.h"
Tower::Tower()
{
// Tower Type
this->type = "Basic";
// Tower Special Effect
this->effect = "None";
// Tower Cost
this->cost = 500;
// Tower Sell Cost
this->sellTower = 300;
// Tower Damage inflicted
this->damage = 50;
// Tower Range (paths)
this->range = 2;
// Tower rate of fire
this->rate = 0.5;
};
TowerDecorator.h
#ifndef __TOWERDECORATOR_H__
#define __TOWERDECORATOR_H__
#include <iostream>
#include <string>
#include "Tower.h"
using namespace std;
class TowerDecorator : public Tower {
private:
Tower *decoratedTower;
public:
TowerDecorator(Tower *decoratedTower)
{
this->decoratedTower = decoratedTower;
}
string type() { return decoratedTower->getType(); }
string effect() { return decoratedTower->getEffect(); }
int getCost() { return decoratedTower->getCost(); }
int getSale() { return decoratedTower->getSale(); }
int getDamage() { return decoratedTower->getDamage(); }
int getRange() { return decoratedTower->getRange(); }
int getROF() { return decoratedTower->getROF(); }
};
#endif __TOWERDECORATOR_H__
iceTower.h
#ifndef ICETOWER_H
#define ICETOWER_H
#include "TowerDecorator.h"
class IceTower : public TowerDecorator {
public:
IceTower(Tower *decoratedTower) : TowerDecorator (decoratedTower){}
int getCost(){return TowerDecorator::getCost() * 2;}
};
#endif __ICETOWER_H__
Driver.cpp
#include "Tower.h"
#include "TowerDecorator.h"
#include "IceTower.h"
void printTowerDetails(Tower* tower)
{
cout << endl << "This is a " << tower->getType() << " Tower" << endl;
cout << "Build Tower : " << tower->getCost() << " Coins" << endl;
cout << "Sell Tower : " << tower->getSale() << " Coins" << endl;
cout << "Tower Range : " << tower->getRange() << " paths" << endl;
cout << "Tower Rate Of Fire : " << tower->getROF() << " p/s" << endl;
cout << "Tower Special Effect : " << tower->getEffect() << "" << endl;
}
int main() {
Tower *t1 = new Tower();
printTowerDetails(t1);
t1 = new IceTower(t1);
printTowerDetails(t1);
}
출력 :
두 가지 이상의 심각한 오류가 있습니다. 첫 번째는 접미사가있는 매니페스트 상수의 정의를 확인 _H__
하지만 접미사없이 정의하는 것입니다.
#ifndef __TOWER_H__
#define __TOWER__
과
#ifndef __TOWERDECORATOR_H__
#define __TOWERDECORATOR__
두 번째는 클래스 정의 뒤에 세미콜론을 넣는 것을 잊었다는 것입니다. TowerDecorator
class TowerDecorator : public Tower {
//...
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다