[ create a new paste ] login | about

Link: http://codepad.org/gNhBFSkG    [ raw code | output | fork ]

C++, pasted on Feb 21:
#include "boost/pointer_cast.hpp"

using boost::shared_ptr;
using boost::dynamic_pointer_cast;


class IMessageHandler;

class Message
{
    public:
        virtual ~Message(){}
};

class IMessageHandler
{
    public:
       virtual bool handleMessage( shared_ptr<Message> msg )=0;
};

class BadNews : public Message{};

    class YouWereAdopted : public BadNews{};


class GoodNews: public Message{};

    class YouWonTheLottery : public GoodNews{};

class TabloidNews : public Message
{
    public:

};
    class InaneDrivel : public TabloidNews{};
    
class NewsMessageHandler : public IMessageHandler
{
    public:
    
        virtual bool handleMessage( shared_ptr<Message> msg )
        {
            shared_ptr<BadNews> bad;
            shared_ptr<GoodNews> good;
            shared_ptr<TabloidNews> tabloid;
            
            if( bad = dynamic_pointer_cast<BadNews>(msg) )
            {
                cout<<"Sorry, you got some bad news"<<endl;
                return true;
            }
            else if( tabloid = dynamic_pointer_cast<TabloidNews>(msg) )
            {
                cout<<"Sorry, you got some tabloid news"<<endl;
                return true;
            }
            else if( good = dynamic_pointer_cast<GoodNews>(msg) )
            {
                cout<<"You got some good news"<<endl;
                return true;
            }
            return false;
        }
};
    
int main()
{
    shared_ptr<NewsMessageHandler> h( new NewsMessageHandler() );
    
    shared_ptr<Message> b ( new BadNews() );
    shared_ptr<Message> g ( new GoodNews() );    
    shared_ptr<Message> t ( new TabloidNews() );   

    shared_ptr<Message> lottery ( new YouWonTheLottery() );    
    shared_ptr<Message> adopted ( new YouWereAdopted() );
    shared_ptr<Message> drivel ( new InaneDrivel() );   
    
    h->handleMessage(b);
    h->handleMessage(g);
    h->handleMessage(t);

    h->handleMessage(adopted);
    h->handleMessage(lottery);
    h->handleMessage(drivel);

}


Output:
1
2
3
4
5
6
Sorry, you got some bad news
You got some good news
Sorry, you got some tabloid news
Sorry, you got some bad news
You got some good news
Sorry, you got some tabloid news


Create a new paste based on this one


Comments: