/* OUTPUT
... Draw ImageView ...
View::render
ImageView::render
... Draw Sprite ...
View::render
ImageView::render
Sprite::render
*/
////////// View ///////////////
class View{
public:
void Render(){
render();
}
protected:
virtual void render(){
std::cout << "View::render" << std::endl;
};
};
////////// ImageView ///////////////
class ImageView : public View{
public:
protected:
virtual void render(){
View::render();
std::cout << "ImageView::render" << std::endl;
}
};
////////// Sprite ///////////////
class Sprite : public ImageView{
public:
protected:
virtual void render(){
ImageView::render();
std::cout << "Sprite::render" << std::endl;
}
};
////////// Utility ///////////////
void Draw(View *vw){
vw->Render();
}
////////// main ///////////////
int main(){
std::cout << "... Draw ImageView ..." << std::endl;
ImageView *imgvw = new ImageView;
Draw(imgvw);
delete imgvw;
std::cout << "... Draw Sprite ..." << std::endl;
Sprite *sp = new Sprite;
Draw(sp);
delete sp;
return 0;
}