Ràng bu c đ ng/tr ộ ộ ễ Sự xác định phương thức nào trong một phân cấp lớp được sử dụng với một đối tượng cụ thể xảy ra trong thời điểm thực thi chương trình... Giải thích kết quả của
Trang 1Chương 4
ĐA HÌNH
Trang 3Tài liệu đọc
Trang 6cout << “Derv 1 \n”;
} };
Trang 7Ví dụ 1 (tt)
void main( ) {
Trang 9Ví dụ 2 (tt)
void Teacher::print() const
{
cout << "Name: "<< name << endl;
cout << " Num of Students:"<< numOfStudents << endl;
Trang 11Ví dụ 3
Trang 12Ví dụ 3 (tt)
Trang 13Ví dụ 3 (tt)
Trang 14Ví dụ 3 (tt)
Trang 15 Ràng bu c đ ng/tr ộ ộ ễ
Sự xác định phương thức nào trong một phân cấp lớp được sử dụng với một đối tượng cụ thể xảy ra trong thời điểm thực thi chương trình
Trang 16Giải thích kết quả của các ví dụ
ani là con trỏ trỏ đến đối tượng thuộc lớp cơ
sở Animal (Animal *ani)
Trang 17Giải thích kết quả của các ví dụ (tt)
Trang 18 Đ xác đ nh m t ph ng th c b ràng bu c đ ng, khai báo ể ị ộ ươ ứ ị ộ ộ ở
ph ng th c c a l p c s ph i dùng t khóa ươ ứ ủ ớ ơ ở ả ừ virtual
Khi m t ph ng th c đ c đ nh nghĩa o, t t c các ph ng ộ ươ ứ ượ ị ả ấ ả ươ
th c ph i n p ch ng t đi m này xu ng phân c p l p cho dù ứ ả ạ ồ ừ ể ố ấ ớ
nó có đ c khai báo là t ng minh hay không ượ ườ
Trang 20Phương thức ảo
Gi s l p c s Base có ph ng th c o ả ử ớ ơ ở ươ ứ ả method và
các l p d n xu t c a Base n p ch ng ph ng th c ớ ẫ ấ ủ ạ ồ ươ ứ
này Khi ta g i ọ method thông qua m t con tr hay tham ộ ỏ
chi u p có ki u Base thì ph ng th c ế ể ươ ứ method đ c ượ
g i s là ph ng th c c a đ i t ng mà p đang tr ọ ẽ ươ ứ ủ ố ượ ỏ
đ n ế
Chú ý: G i ph ng th c ọ ươ ứ method trên m t đ i t ng ộ ố ượ
ki u Base s không có hi u qu nh đã nói trên ể ẽ ệ ả ư ở
Trang 21Đa hình
Ví d : Drawing tool ụ
Rectangle Triangle
Trang 25 (như Rectangle::draw(), Triangle::draw(), Ellipse::draw()).
Trang 26Một số ví dụ
Trang 27Một số ví dụ (tt)
Trang 28Một số ví dụ (tt)
Trang 29Một số ví dụ (tt)
Trang 30Thêm lớp mới
Trang 31Thêm lớp mới (tt)
Trang 32Cách làm việc của đa hình
Trang 33Ứng dụng đa hình
Trang 34Chú ý với phương thức ảo
Ph ng th c o trong l p c s th ng đ c n p ch ng trong ươ ứ ả ớ ơ ở ườ ượ ạ ồ các l p d n xu t ớ ẫ ấ
Đ t t khóa virtual trong l p c s và nên đ t virtual cho c ặ ừ ớ ơ ở ặ ả
ph ng th c trong l p d n xu t ươ ứ ớ ẫ ấ
N u l p d n xu t không đ nh nghĩa l i ph ng th c o c a l p ế ớ ẫ ấ ị ạ ươ ứ ả ủ ớ
c s , nó s s d ng ph ng th c c a l p c s ơ ở ẽ ử ụ ươ ứ ủ ớ ơ ở
Không th khai báo constructor là ph ng th c o ể ươ ứ ả
Có th (và r t nên) khai báo destructor là ph ng th c o ể ấ ươ ứ ả
Trang 35Destructor ảo
that polymorphism can be achieved when a
pointer to delete a derived class object
declared virtual if at least one other function
in the class is declared virtual
Trang 36Ví dụ: Destructot ảo
Animal *ani=new Cat(“Buddy”);
delete ani; //Destructor c a l p Animal s //đ c g i ủ ớ ẽ ượ ọ
//Destructor c a l p Cat không đ c g i ủ ớ ượ ọ
N u khai báo destructor c a Cat và Animal là virtual thì ế ủ destructor c a Cat s đ c g i ủ ẽ ượ ọ
Animal *ani=new Cat(“Buddy”);
delete ani; //Destructor c a l p Cat đ c g i ủ ớ ượ ọ
//Sau đó đ n destructor c a l p Animal ế ủ ớ
Trang 60Hỏi và Đáp