Có một sửa đổi rất thú vị trong chương trình đã được thực hiện, hãy nhìn vào bên trong hàm PlayWithPet →
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 47 48 49 50 51 52 53 54 |
#include <iostream> #include <string> using namespace std; class Pet { protected: string name; public: Pet(string name) : name(name) {} virtual 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; } void Laufen(void) { cout << name << " runs (gs)!" << endl; } }; class MastinEspanol : public Dog { public: MastinEspanol(string name) : Dog(name) {} void MakeSound(void) { cout << name << " says: Guau!" << endl; } void Ejecutar(void) { cout << name << " runs (mes)!" << endl; } }; void PlayWithPet(Pet &pet) { pet.MakeSound(); try { dynamic_cast<GermanShepherd &>(pet).Laufen(); } catch(...) {} try { dynamic_cast<MastinEspanol &>(pet).Ejecutar(); } catch(...) {} } int main(void) { Pet pet("creature"); Dog dog("Dog"); GermanShepherd gs("Hund"); MastinEspanol mes("Perro"); PlayWithPet(pet); PlayWithPet(dog); PlayWithPet(gs); PlayWithPet(mes); return 0; } |
Có một câu lệnh mới ở đây đó là try-catch. Cú pháp của nó như sau;
try { thing_we_want_to_try_although_we_are_not_quite_sure_if_it_is_reasonable; // thử làm một việc gì đó ở đây mặc dù không chắc việc đó là hợp lý } catch(…) {}
Sử dụng câu lệnh này chúng ta có thể “thử” một số hoạt động nguy hiểm và “bắt lỗi” xuất hiện trong quá trình thực hiện.
Trong ví trên, chúng ta bắt lỗi và không làm gì cả. Nhờ đó, những con chó của chúng ta sẽ được trở lại cuộc sống bình thường của chúng. Lỗi phát sinh do ép kiểu không thành công chỉ đơn giản bị bỏ qua, nó không gây hại trong trường hợp thất bại.
Chương trình tạo ra kết quả như sau:
1 2 3 4 5 6 |
creature is silent :( Dog says: Woof! Hund says: Wuff! Hund runs (gs)! Perro says: Guau! Perro runs (mes)! |