tailieunhanh - Ngôn ngữ lập trình - Đa hình

ngôn ngữ lập trình C++ - Đa hình. tài liệu về công nghệ thông tin | Lập trình C++ 1 Bài 7: Đa hình Ví dụ về Animal, Dog và Cat Phương thức ảo Đa hình Huỷ tử ảo Lớp cơ sở trừu tượng Ví dụ về Shape, Circle và Rect Review Bài tập Animal, Dog và Cat Giả sử có các lớp Animal, Dog và Cat như sau: class Animal { protected: char name[30]; public: Animal(char *name); void Speak(); }; Animal::Animal(char *name) { strcpy(this->name, name); } void Animal::Speak() { cout Animal, Dog và Cat // lớp Dog class Dog : public Animal { public: Dog(char *name) : Animal(name) {} void Speak(); // nạp chồng Speak của lớp cha }; void Dog::Speak() { cout Animal, Dog và Cat // lớp Cat class Cat : public Animal { public: Cat(char *name) : Animal(name) {} void Speak(); // nạp chồng Speak của lớp cha }; void Cat::Speak() { cout Animal, Dog và Cat // hàm main void main() { Animal* ani; // con trỏ tới các đối tượng Animal Dog dog("Tony"); // đối tượng | Lập trình C++ 1 Bài 7: Đa hình Ví dụ về Animal, Dog và Cat Phương thức ảo Đa hình Huỷ tử ảo Lớp cơ sở trừu tượng Ví dụ về Shape, Circle và Rect Review Bài tập Animal, Dog và Cat Giả sử có các lớp Animal, Dog và Cat như sau: class Animal { protected: char name[30]; public: Animal(char *name); void Speak(); }; Animal::Animal(char *name) { strcpy(this->name, name); } void Animal::Speak() { cout Animal, Dog và Cat // lớp Dog class Dog : public Animal { public: Dog(char *name) : Animal(name) {} void Speak(); // nạp chồng Speak của lớp cha }; void Dog::Speak() { cout Animal, Dog và Cat // lớp Cat class Cat : public Animal { public: Cat(char *name) : Animal(name) {} void Speak(); // nạp chồng Speak của lớp cha }; void Cat::Speak() { cout Animal, Dog và Cat // hàm main void main() { Animal* ani; // con trỏ tới các đối tượng Animal Dog dog("Tony"); // đối tượng thuộc lớp Dog Cat cat("Fluffy"); // đối tượng thuộc lớp Cat ani = &dog; ani->Speak(); ani = &cat; ani->Speak(); } Animal, Dog và Cat Kết quả màn hình: Hello, I am an animal Hello, I am an animal Giải thích: Khi biên dịch, chương trình sẽ gắn lời gọi Speak với đối tượng của lớp Animal (dòng 8 và 10). Nó sẽ gọi Speak của lớp Animal khi câu lệnh được thực hiện. Quá trình này gọi là kết nối tĩnh (static binding) - phương thức gọi được xác định tại thời điểm dịch (compile time). Phương thức ảo (virtual method) Để cho kết quả đúng như mong muốn, ta cần khai báo Speak trong Animal là phương thức ảo. virtual void Speak(); Phương thức ảo là phương thức của lớp cơ sở và được định nghĩa lại trong lớp dẫn xuất. Khi một con trỏ của lớp cơ sở gọi phương thức ảo, chương trình sẽ chọn phương thức cần thiết (dựa trên đối tượng gọi) để thực hiện. Quá trình này gọi là kết nối động (dynamic binding) - phương thức gọi được xác định vào lúc chạy (execution time). Phương thức ảo (virtual method)

TỪ KHÓA LIÊN QUAN