GIÁO TRÌNH C++ - Trang 106

CRectangle rect;

CTriangle trgl;

CPolygon poly;

CPolygon * ppoly1 = ▭

CPolygon * ppoly2 = &trgl;

CPolygon * ppoly3 = &poly;

ppoly1->set_values (4,5);

ppoly2->set_values (4,5);

ppoly3->set_values (4,5);

cout << ppoly1->area() << endl;

cout << ppoly2->area() << endl;

cout << ppoly3->area() << endl;

return 0;

}

20

10

0

Bây giờ cả ba lớp (

CPolygon

,

CRectangle

CTriangle

) đều có cùng các thành

viên:

width

,

height

,

set_values()

area()

.

area()

được định nghĩa là

virtual

vì nó sẽ được định nghĩa lại trong các lớp

thừa kế. Bạn có thể kiểm tra lại rằng nếu bạn bỏ từ khoá đó và thực hiện
chương trình thì kết quả sẽ là

0

cho cả 3 đa giác thay vì

20,10,0

. Nguyên nhân

là do thay vì gọi hàm

area()

tương ứng với mỗi đối tượng

(

CRectangle::area()

,

CTriangle::area()

CPolygon::area()

),

CPolygon::area()

sẽ được gọi cho tất cả thông qua một con trỏ tới

CPolygon

.