#include <iostream>
#include <string>
#include <exception>
using namespace std;
class Mom {
protected:
int age;
public:
Mom(int x) : age(x) {}
virtual void introduce() {
cout << "I am Mommy. I'm " << age << " years old." << endl;
}
};
class Daughter : public Mom {
public:
string is_daughter = "Yes";
Daughter(int x) : Mom(x) {}
virtual void introduce() {
cout << "I am Daughter. I'm " << age << " years old." << endl;
}
void boyfriend() {
cout << "This is a secret: I have a boyfriend." << endl;
}
string confirm() { return is_daughter; }
};
int main() {
// dynamic cast
Mom *m = new Mom(49);
Daughter *d = new Daughter(16);
Mom *m2 = new Daughter(23);
Daughter *d2 = dynamic_cast<Daughter*>(m); // dynamic downcast1
Daughter *d3 = dynamic_cast<Daughter*>(m2); // dynamic downcast2
Mom *m3 = dynamic_cast<Mom*>(d); // dynamic upcast
cout << d2 << endl; // base* to base -> cast to derived -> cast fail
cout << d3 << endl; // base* to derived -> cast to derived -> cast success
cout << m3 << endl;
cout << "result of d3:" << endl;
try{ // completely casted
d3->introduce();
d3->boyfriend();
} catch(exception& e) {
cout << e.what() << endl;
}
cout << "result of m3:" << endl;
try {
m3->introduce(); // virtual - call daughter's introduce()
} catch(exception& e) {
cout << e.what() << endl;
}
delete m2;
delete m;
delete d;
return 0;
}
To embed this program on your website, copy the following code and paste it into your website's HTML: