改訂cを一緒に使用...オブザーバーとデコレータは、私はプログラムがデコレータ/ラッパーとして飲料を行いコーヒーハウスのthats持っ++ * *
私もオブザーバーを持っていると私は飲料とのことをで結ぶしようとしています。そう、注文が携帯電話1に置かれると、通知されます。私は更新を行う方法を知らない。
私はTheOrderクラスを渡すとエラーが出る!
飲料コンクリートクラスの
#ifndef _BEVERAGE_
#define _BEVERAGE_
#include "Starbuzz.h"
namespace CoffeeHouse {
namespace Decorator {
//namespace Observer {
//using namespace std;
class Beverage {
protected: std::string _description;
protected: Beverage() :
_description("Unknown Beverage") {
}
public: virtual ~Beverage() = 0 {
}
public: virtual std::string getDescription() const {
return _description;
}
public: virtual double cost() const = 0;
};
} // namespace Observer
} // namespace CoffeeHouse
//}
#endif
1 beverage.h - 私は4(エスプレッソ、houseblend、darkroast、カフェイン抜き)
#ifndef _DARK_ROAST_
#define _DARK_ROAST_
#include "Starbuzz.h"
namespace CoffeeHouse {
namespace Decorator {
//namespace Observer {
class DarkRoast : public Beverage {
public:
DarkRoast()
{
_description = "Dark Roast Coffee";
}
public: double cost() const {
return 0.99;
}
};
} // namespace Observer
}
#endif
飲料デコレータ
#ifndef _BEVERAGE_DECORATOR_
#define _BEVERAGE_DECORATOR_
#include "Starbuzz.h"
namespace CoffeeHouse {
namespace Decorator {
class BeverageDecorator : public Beverage {
private: BeverageDecorator(const BeverageDecorator&); // Disable copy constructor
private: void operator=(const BeverageDecorator&); // Disable assignment operator
protected: BeverageDecorator() {
}
public: virtual ~BeverageDecorator() = 0 {
};
public: virtual std::string getDescription() const = 0;
};
//}
} // namespace Observer
} // namespace CoffeeHouse
#endif
ここ有しますオブザーバの実装です。
テーマクラスここで
#ifndef _SUBJECT_
#define _SUBJECT_
#include "Observer.h"
#include <list>
namespace CoffeeHouse {
namespace Observers {
class Subject {
protected: virtual ~Subject() = 0 {
};
public: virtual void registerObserver(Observer* o) = 0;
public: virtual void removeObserver(Observer* o) = 0;
public: virtual void notifyObservers() = 0;
};
} // namespace Observer
}
#endif
被写体具象クラスである..ここ
#ifndef _THE_ORDER_
#define _THE_ORDER_
#include "Beverage.h"
#include <list>
#include <iostream>
#include "Order.h"
#pragma once;
using namespace CoffeeHouse::Decorator;
namespace CoffeeHouse {
namespace Observers {
class TheOrder : public Subject {
private: mutable std::list< Observer* > _observers;
//private: mutable std::list< Order* > _orders;
//public: virtual ~Order() = 0
//public: ~TheOrder();
public: void NewOrder(Beverage* bev)
{
_orders.push_front(new Order(bev));
//_observers.push_front(new Order(bev));
}
public: void registerObserver(Observer* o) { assert(o);
_observers.push_back(o);
}
public: void removeObserver(Observer* o) { assert(o);
_observers.remove(o);
}
public: void notifyObservers() {
for(std::list< Observer* >::iterator iterator = _observers.begin(); _observers.end() != iterator; ++iterator) {
Observer* observer = *iterator;
observer->update();
}
}
};
//}
} // namespace Observer
} // namespace CoffeeHouse
#endif
は、観察者にあるcellphone1あり、ここで
#ifndef _CELLPHONE1_
#define _CELLPHONE1_
#include <iostream>
using namespace std;
namespace CoffeeHouse {
namespace Observers {
class CellPhone1: public Observer {
public:
std::string _number;
CellPhone1(std::string number){
_number = number;
}
void update()
{
std::cout << "BUZZZZZZZ - CellPhone #" << _number << " your order is ready " << endl;
}
};
} // namespace Observer
} //
#endif
メイン()
#include "Starbuzz.h"
#include "Starbuzz2.h"
#include "Subject.h"
#include "TheOrder.h"
#include "CellPhone2.h"
#include "CellPhone3.h"
#include "CellPhone1.h"
using namespace CoffeeHouse::Decorator;
using namespace CoffeeHouse::Observers;
int main(int argc, char* argv[])
{
Beverage* beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
std::cout << beverage3->getDescription()
<< " $"
<< beverage3->cost()
<< std::endl;
delete beverage3;
delete beverage2;
//delete beverage;
TheOrder* orders = new TheOrder();
CellPhone1* obj = new CellPhone1("1");
orders->registerObserver(obj);
orders->notifyObservers();
Beverage* beverage6 = new DarkRoast();
orders->NewOrder(new Mocha(new Soy(new Whip((beverage6)))));
return 0;
}ここ
は順番クラスは、今私がちょうど更新を行う必要があり、そう
#ifndef _ORDER_
#define _ORDER_
#include <iostream>
#include "Beverage.h"
namespace CoffeeHouse {
namespace Decorator {
class Order {
Beverage* _beverage;
public:
Order(Beverage* beverage)
{
_beverage = beverage;
}
};
}
}
#endif
です。 update()で渡す必要があるのは何ですか?
携帯電話で注文を表示できるように、更新の順番で渡したいと思います。もし私が "theorder.h"をインクルードしなければならない注文クラスを渡そうとすると、何百万ものエラーが発生します。あなたが明示的に各メソッド/属性の「アクセス指定」(パブリック/プライベート/保護された)を宣言する必要はありません
1):ここでは
ここには多すぎる独立した質問があります。あなたの投稿をかなり編集して、特定の問題に集中できますか? –
私はそれを更新し、いくつかの事を変えた。 –
それはまだtl;虎 – KitsuneYMG