Bây giờ chúng tôi thay đổi chương trình ở trang trước một chút →
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <iostream> #include <string> using namespace std; class Pet { protected: string name; public: Pet(string name) { this -> name = name; } void MakeSound(void) { cout << name << " is silent :(" << endl; } }; class Dog : public Pet { public: Dog(string name) : Pet(name) {} void MakeSound(void) { cout << name << " says: Woof!" << endl; } }; class GermanShepherd : public Dog { public: GermanShepherd(string name) : Dog(name) {} void MakeSound(void) { cout << name << " says: Wuff!" << endl; } }; class MastinEspanol : public Dog { public: MastinEspanol(string name) : Dog(name) {} void MakeSound(void) { cout << name << " says: Guau!" << endl; } }; void PlayWithPet(Pet *pet) { pet -> MakeSound(); } int main(void) { Pet *pet = new Pet("creature"); Dog *dog = new Dog("Dog"); GermanShepherd *gs = new GermanShepherd("Hund"); MastinEspanol *mes = new MastinEspanol("Perro"); PlayWithPet(pet); PlayWithPet(dog); PlayWithPet(gs); PlayWithPet(mes); return 0; } |
Sự thay đổi source code không làm thay đổi hành vi của nó và kết quả của chương trình là không thay đổi. Chúng tôi chỉ thay đổi tham số của hàm PlayWithPet và bây giờ hàm này có tham số đầu vào là một con trỏ chứ không phải là một tham chiếu. Và rõ ràng, hàm main cũng phải thay đổi theo.