Có một quy tắc là các đối tượng ở level cao hơn thì sẽ tương thích với các đối tượng ở các level thấp hơn trong hệ phân cấp lớp. Ví dụ →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> #include <string> using namespace std; class Pet { protected: string Name; public: Pet(string n) { Name = n; } void Run(void) { cout << Name << ": I'm running" << endl; } }; class Cat : public Pet { public: Cat(string n) : Pet(n) {}; void MakeSound(void) { cout << Name << ": Meow! Meow!" << endl; } }; class Persian : public Cat { public: Persian(string n) : Cat(n) {}; }; int main(void) { Pet *a_pet; Persian *a_persian; a_pet = a_persian = new Persian("Mr. Bigglesworth"); a_persian -> MakeSound(); static_cast<Persian *>(a_pet) -> MakeSound(); return 0; } |
cho thấy một chuỗi gồm ba lớp. Con trỏ trỏ tới lớp cơ sở ở tầng trên cùng vẫn hoạt động bình thường khi trỏ tới đối tượng từ thuộc lớp con dưới cùng.
Chương trình in ra văn bản sau:
1 2 |
Mr. Bigglesworth: Meow! Meow! Mr. Bigglesworth: Meow! Meow! |