#include <iostream>
using namespace std;
class Person {
protected:
string name;
public:
Person(string name = "") : name(name) {};
virtual ~Person() {}
string getInfo() {
return name;
}
};
class Student : public Person {
string studentid;
public:
Student(string name = "", string sid = "") : Person(name), studentid(sid) {};
string getInfo() {
return name + ":(" + studentid + ")";
}
};
int main() {
Person person("Yu");
Student student("Sam", "20210212");
Person* pp = &student;
Person& rp = student;
Student* ps = (Student*)&person; // danger!
cout << "person.getInfo():" << person.getInfo() << endl;
cout << "pp->getInfo():" << pp->getInfo() << endl;
cout << "rp.getInfo():" << rp.getInfo() << endl;
cout << "ps->getInfo():" << ps->getInfo() << endl; // danger if getInfo is not virtual
char* p = (char*)100;
// ps = dynamic_cast<Student*>(&person);
// printf("address = %p\n", ps);
// pp = dynamic_cast<Person*>(&student);
// printf("address = %p\n", pp);
return 0;
}