Danh mục tài liệu

Bài giảng Lập trình nâng cao: Bài 13 - Hoàng Thị Điệp

Số trang: 39      Loại file: pdf      Dung lượng: 246.23 KB      Lượt xem: 19      Lượt tải: 0    
Xem trước 4 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Trong bài này người học sẽ tìm hiểu các nội dung liên quan đến tính thừa kế và lập trình tính thừa kế. Nội dung chính của bài gồm: Lớp dẫn xuất và hàm kiến tạo, từ khóa protected, định nghĩa lại hàm thành viên, những hàm không được thừa kế, toán tử gán và hàm kiến tạo sao chép, hàm hủy trong lớp dẫn xuất, đa thừa kế.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao: Bài 13 - Hoàng Thị ĐiệpBài 13: Tính thừa kế Giảng viên: Hoàng Thị ĐiệpKhoa Công nghệ Thông tin – ĐH Công Nghệ Thuật ngữ• inheritance: tính thừa kế• derive: dẫn xuất / thừa kế• base/parent class: lớp cơ sở / lớp cha• derived/child class: lớp dẫn xuất / lớp con• override: che khuất (khác overload) – function overriding khác function overloading• multiple inheritance: đa thừa kếDTH INT2202 2 Chapter 14 InheritanceCopyright © 2010 Pearson Addison-Wesley.All rights reserved Day 12 InheritanceDTH INT2202 4 Mục tiêu bài học• Căn bản về tính thừa kế – Lớp dẫn xuất và hàm kiến tạo – Từ khóa protected – Định nghĩa lại hàm thành viên – Những hàm không được thừa kế• Lập trình tính thừa kế – Toán t ử gán và hàm kiến tạo sao chép – Hàm hủy trong lớp dẫn xuất – Đa thừa kếDTH INT2202 5 Giới thiệu tính thừa kế• Lập trình hướng đối tượng – Kĩ thuật lập trình mạnh – Cung cấp cơ chế trừu tượng gọi là thừa kế• Trước tiên định nghĩa dạng tổng quát của lớp – Sau đó định nghĩa dạng cụ thể thừa kế các thuộc tính của dạng tổng quát – Và bổ sung/chỉnh sửa tính năng cho phù hợp với dạng cụ thểDTH INT2202 6 Căn bản về tính thừa kế• Một lớp mới thừa kế từ một lớp khác• Lớp cơ sở – là lớp “tổng quát” để các lớp khác dẫn xuất• Lớp dẫn xuất – là lớp mới – tự động sao từ lớp cơ sở: • các biến thành viên • các hàm thành viên – có thể thêm hàm và biến thành viên của riêng nóDTH INT2202 7 Lớp dẫn xuất• Xét ví dụ: lớp biểu diễn động vật Mammal• Lớp này bao gồm: chó (Dog), mèo (Cat), ngựa (Horse), …• Mỗi loài là một tập con của lớp động vậtDTH INT2202 8 Lớp cơ sở• Một con vật phải thuộc một loài nào đó trong lớp động vật• Động vật nói chung – có tuổi đời (itsAge) – có cân nặng (itsWeight) – có các khả năng cơ bản như kêu (speak), ngủ (sleep)• Như vậy lớp tổng quát Mammal có thể chứa các thuộc tính chung cho tất cả động vậtDTH INT2202 9 Lớp Mammal• Nhiều hàm/biến thành viên của lớp động vật Mammal có thể sử dụng cho tất cả các loài – Hàm truy cập biến thành viên – Hàm biến đổi biến thành viên – Các biến • tuổi đời • cân nặng• Tuy nhiên ta sẽ không tạo đối tượng thuộc lớp MammalDTH INT2202 10 Lớp Mammal• Xét hàm speak() : – Nó sẽ được “định nghĩa lại” trong các lớp dẫn xuất – Để những loài khác nhau có tiếng kêu khác nhau • Dog: “Ruff ruff woof woof” • Cat: “Meow meow meow” • Horse: “Winnie winnie” • Pig: “Oink oink” – Hàm speak() vô nghĩa khi ta chưa biết con vật thuộc loài nào • Chưa biết nó thuộc loài nào thì không biết tiếng kêu sẽ như thế nào – Do đó hàm speak() của Mammal chỉ in ra màn hình xâu “Mammal sound!”DTH INT2202 11 Dẫn xuất từ lớp Mammal• Các lớp dẫn xuất từ lớp Mammal: – sẽ tự động có tất cả các biến/hàm thành viên của Mammal• Lớp dẫn xuất vì thế được hiểu là “thừa kế” các thành viên từ lớp cơ sở• Sau đó có thể ĐỊNH NGHĨA LẠI các thành viên đã có sẵn hoặc THÊM thành viên mớiDTH INT2202 12 Giao diện của lớp Mammal class Mammal{ public: // ham kien tao, ham huy Mammal(): itsAge(2), itsWeight(6){} ~Mammal(){} // ham truy cap bien thanh vien int getAge()const { return itsAge; } void setAge(int age) { itsAge = age; } int getWeight() const { return itsWeight; } void setWeight(int weight) { itsWeight = weight; } // ham khac void speak()const { cout Giao diện của lớp Dog enum BREED {YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB}; // Lop Dog mo phong cho class Dog: public Mammal{ public: // ham kien tao, ham huy Dog(): itsBreed(YORKIE){} ~Dog(){} // ham truy cap bien thanh vien BREED getBreed() const { return itsBreed; } void setBreed(BREED breed) { itsBreed = breed; } // ham khac void speak()const { cout Giao diện lớp Dog• Nếu chia chương trình thành nhiều tệp – main.cpp, Mammal.h, Mammal.cpp, Dog.h, Dog.cpp – thì bạn cần bổ sung cấu trúc #ifndef – và khai báo các thư viện cần thiết – Trong main.cpp, khai báo “Dog.h”• Dòng đầu của lớp Dog: class Dog: public Mammal – xác định nó thừa kế public từ lớp MammalDTH INT2202 15 Các thuộc tính bổ sung của lớp Dog• Giao diện của lớp dẫn xuất chỉ liệt kê những thành viên mới hoặc “cần định nghĩa lại” – vì tất cả những thành viên khác thừa kế từ lớp cơ sở đã được định nghĩa rồi – nghĩa là, mọi con chó đều có itsAge và itsWeight...• Lớp Dog bổ sung: – hàm kiến tạo – biến thành viên itsBreed – hàm thành viên getBreed(), setBreed(), wagTail(), begForFood()DTH INT2202 16 Hàm thành viên được định nghĩa lại trong Dog• Lớp Dog đã định nghĩa lại: – hàm thành viên speak() – phiên bản cài đặt nó trong Dog sẽ “che khuất” phiên bản cài đặt trong Mammal• ...

Tài liệu được xem nhiều:

Tài liệu có liên quan: