#include
#include
using namespace std;
class Person {
public:
Person(const string& n="") : _name(n) {}
virtual ~Person() {}
virtual void Display() { cout << "person\n"; }
protected:
string _name;
};
class Student : public Person {
public:
Student(const string& n, int num) : Person(n), _num(num) {}
virtual void Display() override { cout << "student\n"; }
protected:
int _num;
};
void Test() {
Person p1("頭頭");
Person* p2 = &p1;
p1.Display(); p2->Display(); // person, person
Student s1("大頭", 4130905);
p2 = &s1;
s1.Display(); p2->Display(); // student, student (多態生效)
}
int main() { Test(); return 0; }
delete basePtr 不調用派生類析構。override(C++11),編譯器檢查簽名一致性。註釋部分展示虛繼承解決菱形問題:virtual public Botany 使 Tree、Flower 共享同一 Botany 子對象,MicheliaAlba 構造函數需顯式調用虛基類構造函數。