#include <iostream>
#include <string>
using namespace std;
class Person
{
protected :
string m_name;
public :
Person( const string & name)
: m_name( name)
{
cout << "Creating Person Class" << endl;
}
void about_me( )
{
cout << "I am a person, my name is " << m_name << endl;
}
} ;
class Student : protected Person
{
private :
int m_id;
string m_school;
public :
Student( const string & name, int id, const string & school)
: Person( name) , m_id( id) , m_school( school)
{
cout << "Creating Student Class" << endl;
}
void about_me( )
{
cout << "I am a student, my name is " << m_name << ", my id is " << m_id << " at " << m_school << endl;
}
} ;
int main( )
{
Person* pperson = new Person( "John Doe" ) ;
Student* pstudent = new Student( "Jane Doe" , 12345 , "Some School" ) ;
pperson- > about_me( ) ;
pstudent- > about_me( ) ;
pperson- > about_me( ) ;
( ( Student* ) pperson) - > about_me( ) ;
delete pstudent;
delete pperson;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUGVyc29uCnsKcHJvdGVjdGVkOgogICAgc3RyaW5nIG1fbmFtZTsKCnB1YmxpYzoKCiAgICBQZXJzb24oY29uc3Qgc3RyaW5nICZuYW1lKQogICAgICAgIDogbV9uYW1lKG5hbWUpCiAgICB7CiAgICAgICAgY291dCA8PCAiQ3JlYXRpbmcgUGVyc29uIENsYXNzIiA8PCBlbmRsOwogICAgfQoKICAgIHZvaWQgYWJvdXRfbWUoKQogICAgewogICAgICAgIGNvdXQgPDwgIkkgYW0gYSBwZXJzb24sIG15IG5hbWUgaXMgIiA8PCBtX25hbWUgPDwgZW5kbDsKICAgIH0KfTsKCmNsYXNzIFN0dWRlbnQgOiBwcm90ZWN0ZWQgUGVyc29uCnsKcHJpdmF0ZToKICAgIGludCBtX2lkOwogICAgc3RyaW5nIG1fc2Nob29sOwoKcHVibGljOgoKICAgIFN0dWRlbnQoY29uc3Qgc3RyaW5nICZuYW1lLCBpbnQgaWQsIGNvbnN0IHN0cmluZyAmc2Nob29sKQogICAgICAgIDogUGVyc29uKG5hbWUpLCBtX2lkKGlkKSwgbV9zY2hvb2woc2Nob29sKQogICAgewogICAgICAgIGNvdXQgPDwgIkNyZWF0aW5nIFN0dWRlbnQgQ2xhc3MiIDw8IGVuZGw7CiAgICB9CgogICAgdm9pZCBhYm91dF9tZSgpCiAgICB7CiAgICAgICAgY291dCA8PCAiSSBhbSBhIHN0dWRlbnQsIG15IG5hbWUgaXMgIiA8PCBtX25hbWUgPDwgIiwgbXkgaWQgaXMgIiA8PCBtX2lkIDw8ICIgYXQgIiA8PCBtX3NjaG9vbCA8PCBlbmRsOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBQZXJzb24qIHBwZXJzb24gPSBuZXcgUGVyc29uKCJKb2huIERvZSIpOwogICAgU3R1ZGVudCogcHN0dWRlbnQgPSBuZXcgU3R1ZGVudCgiSmFuZSBEb2UiLCAxMjM0NSwgIlNvbWUgU2Nob29sIik7CgogICAgcHBlcnNvbi0+YWJvdXRfbWUoKTsKICAgIHBzdHVkZW50LT5hYm91dF9tZSgpOwoKICAgIHBwZXJzb24tPiBhYm91dF9tZSgpOwoKICAgICgoU3R1ZGVudCopcHBlcnNvbiktPiBhYm91dF9tZSgpOwoKICAgIGRlbGV0ZSBwc3R1ZGVudDsKICAgIGRlbGV0ZSBwcGVyc29uOwoKCXJldHVybiAwOwp9