struct Lemonade {
virtual string taste()=0;
virtual string colour()=0;
//...
};
class YellowLemonade : public Lemonade {
public:
YellowLemonade(YELLOW_LEM *l){ m_ptr = l;}
string taste(){ return m_ptr->taste(); } // common
string colour(){ return "yellow"; } // common
string yellowshade() { return m_ptr->shade(); } // yellow only
private:
YELLOW_LEM *m_ptr;
};
class PinkLemonade : public Lemonade {
public:
PinkLemonade(PINK_LEM *l){ m_ptr = l;}
string taste(){ return m_ptr->taste(); } // common
string colour(){ return "pink"; } // common
string pinkintensity(){ return m_ptr->intensity(); } // pink only
private:
PINK_LEM *m_ptr;
};