#include "iostream"
#include "string"
using namespace std;
int main( )
{
std:: cout << "Object Oriented Pattern:\n \n " ;
MallardDuck Duck1;
Duck1.fly ( ) ;
Duck1.quack ( ) ;
RubberDuck Duck2;
Duck2.fly ( ) ;
Duck2.quack ( ) ;
std:: cin .get ( ) ;
return 0 ;
} ;
class IFlyBehavior
{
public :
virtual void fly( ) ;
} ;
class IQuackBehavior
{
public :
virtual void quack( ) ;
} ;
class Duck
{
protected :
IFlyBehavior FlyBehavior;
IQuackBehavior QuackBehavior;
public :
void fly( )
{
FlyBehavior.fly ( ) ;
}
void quack( )
{
QuackBehavior.quack ( ) ;
}
} ;
class RubberDuck : Duck
{
public :
RubberDuck( ) : Duck( )
{
NoFly FlyBehavior;
Squeak QuackBehavior;
}
} ;
class MallardDuck : Duck
{
public :
MallardDuck( ) : Duck( )
{
FlyWithWings FlyBehavior;
Quack QuackBehavior;
}
~MallardDuck( ) { } ;
} ;
class FlyWithWings : IFlyBehavior
{
void fly( )
{
cout << "Flapping wings." ;
}
} ;
class NoFly : IFlyBehavior
{
void fly( )
{
cout << "Can't fly." ;
}
} ;
class Quack : IQuackBehavior
{
void quack( )
{
cout << "Quack!" ;
}
} ;
class Squeak : IQuackBehavior
{
void quack( )
{
cout << "Squeak!" ;
}
} ;
CiNpbmNsdWRlICJpb3N0cmVhbSIKI2luY2x1ZGUgInN0cmluZyIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCAiT2JqZWN0IE9yaWVudGVkIFBhdHRlcm46XG5cbiI7CgogICAgTWFsbGFyZER1Y2sgRHVjazE7CiAgICBEdWNrMS5mbHkoKTsKICAgIER1Y2sxLnF1YWNrKCk7CgogICAgUnViYmVyRHVjayBEdWNrMjsKICAgIER1Y2syLmZseSgpOwogICAgRHVjazIucXVhY2soKTsKCiAgICBzdGQ6OmNpbi5nZXQoKTsKICAgIHJldHVybiAwOwp9OwoKY2xhc3MgSUZseUJlaGF2aW9yCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGZseSgpOwp9OwoKY2xhc3MgSVF1YWNrQmVoYXZpb3IKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgcXVhY2soKTsKfTsKCmNsYXNzIER1Y2sKewpwcm90ZWN0ZWQ6CiAgICBJRmx5QmVoYXZpb3IgRmx5QmVoYXZpb3I7CiAgICBJUXVhY2tCZWhhdmlvciBRdWFja0JlaGF2aW9yOwoKcHVibGljOgogICAgdm9pZCBmbHkoKQogICAgewogICAgICAgIEZseUJlaGF2aW9yLmZseSgpOwogICAgfQogICAgdm9pZCBxdWFjaygpCiAgICB7CiAgICAgICAgUXVhY2tCZWhhdmlvci5xdWFjaygpOwogICAgfQp9OwoKY2xhc3MgUnViYmVyRHVjayA6IER1Y2sKewpwdWJsaWM6CiAgICBSdWJiZXJEdWNrKCkgOiBEdWNrKCkKICAgIHsKICAgICAgICBOb0ZseSBGbHlCZWhhdmlvcjsKICAgICAgICBTcXVlYWsgUXVhY2tCZWhhdmlvcjsKICAgIH0KfTsKCmNsYXNzIE1hbGxhcmREdWNrIDogRHVjawp7CnB1YmxpYzoKICAgIE1hbGxhcmREdWNrKCkgOiBEdWNrKCkKICAgIHsKICAgICAgICBGbHlXaXRoV2luZ3MgRmx5QmVoYXZpb3I7CiAgICAgICAgUXVhY2sgUXVhY2tCZWhhdmlvcjsKICAgIH0KICAgIH5NYWxsYXJkRHVjaygpIHsgfTsKfTsKCmNsYXNzIEZseVdpdGhXaW5ncyA6IElGbHlCZWhhdmlvcgp7CiAgICB2b2lkIGZseSgpCiAgICB7CiAgICAgICAgY291dCA8PCAiRmxhcHBpbmcgd2luZ3MuIjsKICAgIH0KfTsKCmNsYXNzIE5vRmx5IDogSUZseUJlaGF2aW9yCnsKICAgIHZvaWQgZmx5KCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJDYW4ndCBmbHkuIjsKICAgIH0KfTsKCmNsYXNzIFF1YWNrIDogSVF1YWNrQmVoYXZpb3IKewogICAgdm9pZCBxdWFjaygpCiAgICB7CiAgICAgICAgY291dCA8PCAiUXVhY2shIjsKICAgIH0KfTsKCmNsYXNzIFNxdWVhayA6IElRdWFja0JlaGF2aW9yIAp7CiAgICB2b2lkIHF1YWNrKCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJTcXVlYWshIjsKICAgIH0KfTs=
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:11:5: error: ‘MallardDuck’ was not declared in this scope
MallardDuck Duck1;
^~~~~~~~~~~
prog.cpp:12:5: error: ‘Duck1’ was not declared in this scope
Duck1.fly();
^~~~~
prog.cpp:15:5: error: ‘RubberDuck’ was not declared in this scope
RubberDuck Duck2;
^~~~~~~~~~
prog.cpp:16:5: error: ‘Duck2’ was not declared in this scope
Duck2.fly();
^~~~~
prog.cpp: In constructor ‘RubberDuck::RubberDuck()’:
prog.cpp:57:9: error: ‘NoFly’ was not declared in this scope
NoFly FlyBehavior;
^~~~~
prog.cpp:58:9: error: ‘Squeak’ was not declared in this scope
Squeak QuackBehavior;
^~~~~~
prog.cpp: In constructor ‘MallardDuck::MallardDuck()’:
prog.cpp:67:9: error: ‘FlyWithWings’ was not declared in this scope
FlyWithWings FlyBehavior;
^~~~~~~~~~~~
prog.cpp:68:9: error: ‘Quack’ was not declared in this scope
Quack QuackBehavior;
^~~~~
stdout