#include <iostream>
#include <string>
using namespace std;
//class Engine
class Car;
class Engine
{
private :
int CC_;
string type_;
int weight_;
friend void check_engine( Car& ) ;
friend class Car;
friend void check_my_engine( void ) ;
public :
//Engine constructor
Engine( int c, string t, int w)
: CC_( c)
, type_( t)
, weight_( w)
{
cout << "Engine!" << '\t '
<< "CC: " << c << '\t '
<< "Type: " << t << '\t '
<< "Weight: " << w << '\n ' ;
}
//Engine destructor
~Engine( )
{
cout << "Engine destructor!" << endl;
}
} ;
//class Car - Inheritance class Engine
class Car
{
private :
Engine my_engine;
friend void check_engine( Car& ) ;
public :
//Car constructor
Car( int c, string t, int w)
: my_engine( c, t, w)
{
cout << "Car!" << '\t '
<< "CC: " << c << '\t '
<< "Type: " << t << '\t '
<< "Weight: " << w << endl;
}
//function-check_my_engine
void check_my_engine( void )
{
cout << "Check my engine!" << '\t ' ;
cout << "CC: " << my_engine.CC_ << '\t '
<< "Type: " << my_engine.type_ << '\t '
<< "Weight: " << my_engine.weight_ << endl;
}
//Car destructor
~Car( )
{
cout << "Car destructor!" << endl;
}
} ;
//function-check_engine
void check_engine( Car& bu)
{
cout << "Check engine!" << '\t ' ;
cout << "CC: " << bu.my_engine .CC_ << '\t '
<< "Type: " << bu.my_engine .type_ << '\t '
<< "Weight: " << bu.my_engine .weight_ << endl;
}
int main( )
{
Car car( 99 , "wow" , 99 ) ;
check_engine( car) ;
check_my_engine( void ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovL2NsYXNzIEVuZ2luZQoKY2xhc3MgQ2FyOwpjbGFzcyBFbmdpbmUKewogICAgcHJpdmF0ZToKICAgICAgICBpbnQgQ0NfOwogICAgICAgIHN0cmluZyB0eXBlXzsKICAgICAgICBpbnQgd2VpZ2h0XzsKICAgICAgICBmcmllbmQgdm9pZCBjaGVja19lbmdpbmUoQ2FyJik7CiAgICAgICAgZnJpZW5kIGNsYXNzIENhcjsKICAgICAgICBmcmllbmQgdm9pZCBjaGVja19teV9lbmdpbmUodm9pZCk7CiAgICAKICAgIHB1YmxpYzoKICAgICAgICAvL0VuZ2luZSBjb25zdHJ1Y3RvcgogICAgICAgIEVuZ2luZShpbnQgYywgc3RyaW5nIHQsIGludCB3KQogICAgICAgICAgICA6IENDXyhjKQogICAgICAgICAgICAsIHR5cGVfKHQpCiAgICAgICAgICAgICwgd2VpZ2h0Xyh3KQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAiRW5naW5lISIgPDwgJ1x0JwogICAgICAgICAgICAgICAgIDw8ICJDQzogIiA8PCBjIDw8ICdcdCcgCiAgICAgICAgICAgICAgICAgPDwgIlR5cGU6ICIgPDwgdCA8PCAnXHQnIAogICAgICAgICAgICAgICAgIDw8ICJXZWlnaHQ6ICIgPDwgdyA8PCAnXG4nOwogICAgICAgIH0KCiAgICAgICAgLy9FbmdpbmUgZGVzdHJ1Y3RvcgogICAgICAgIH5FbmdpbmUoKQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAiRW5naW5lIGRlc3RydWN0b3IhIiA8PCBlbmRsOwogICAgICAgIH0KfTsKCi8vY2xhc3MgQ2FyIC0gSW5oZXJpdGFuY2UgY2xhc3MgRW5naW5lCmNsYXNzIENhcgp7CiAgICBwcml2YXRlOgogICAgICAgIEVuZ2luZSBteV9lbmdpbmU7ICAgCiAgICAgICAgZnJpZW5kIHZvaWQgY2hlY2tfZW5naW5lKENhciYpOwogICAgCiAgICBwdWJsaWM6CiAgICAgICAgLy9DYXIgY29uc3RydWN0b3IKICAgICAgICBDYXIoaW50IGMsIHN0cmluZyB0LCBpbnQgdykKICAgICAgICAgICAgOiBteV9lbmdpbmUoYywgdCwgdykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIkNhciEiIDw8ICdcdCcKICAgICAgICAgICAgICAgICA8PCAiQ0M6ICIgPDwgYyA8PCAnXHQnCiAgICAgICAgICAgICAgICAgPDwgIlR5cGU6ICIgPDwgdCA8PCAnXHQnCiAgICAgICAgICAgICAgICAgPDwgIldlaWdodDogIiA8PCB3IDw8IGVuZGw7CiAgICAgICAgfQoKICAgICAgICAvL2Z1bmN0aW9uLWNoZWNrX215X2VuZ2luZQogICAgICAgIHZvaWQgY2hlY2tfbXlfZW5naW5lKHZvaWQpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICJDaGVjayBteSBlbmdpbmUhIiA8PCAnXHQnOwogICAgICAgICAgICBjb3V0IDw8ICJDQzogIiA8PCBteV9lbmdpbmUuQ0NfIDw8ICdcdCcKICAgICAgICAgICAgICAgICA8PCAiVHlwZTogIiA8PCBteV9lbmdpbmUudHlwZV8gPDwgJ1x0JwogICAgICAgICAgICAgICAgIDw8ICJXZWlnaHQ6ICIgPDwgbXlfZW5naW5lLndlaWdodF8gPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgICAgICAgICAvL0NhciBkZXN0cnVjdG9yCiAgICAgICAgfkNhcigpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICJDYXIgZGVzdHJ1Y3RvciEiIDw8IGVuZGw7CiAgICAgICAgfQp9OwoKLy9mdW5jdGlvbi1jaGVja19lbmdpbmUgCnZvaWQgY2hlY2tfZW5naW5lKENhciYgYnUpCnsKICAgIGNvdXQgPDwgIkNoZWNrIGVuZ2luZSEiIDw8ICdcdCc7IAogICAgY291dCA8PCAiQ0M6ICIgPDwgYnUubXlfZW5naW5lLkNDXyA8PCAnXHQnCiAgICAgICAgIDw8ICJUeXBlOiAiIDw8IGJ1Lm15X2VuZ2luZS50eXBlXyA8PCAnXHQnCiAgICAgICAgIDw8ICJXZWlnaHQ6ICIgPDwgYnUubXlfZW5naW5lLndlaWdodF8gPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICBDYXIgY2FyKDk5LCAid293IiwgOTkpOwoKICAgIGNoZWNrX2VuZ2luZShjYXIpOwoKICAgIGNoZWNrX215X2VuZ2luZSh2b2lkKTsgIAoKICAgIHJldHVybiAwOyAgIAp9Cgo=