Trừu tượng hoá lớp cơ sở
Các lớp trừu trượng là một cái gì đó rất giống với lớp lớp
CPolygon
trong ví dụ
trước của chúng ta. Sự khác biệt duy nhất là trong ví dụ đó chúng ta đã định
nghĩa hàm
area()
cho các đối tượng thuộc lớp
CPolygon
(giống như đối tượng
poly
), trong khi ở trong một lớp trừu tượng cơ sở chúng ta có thể bỏ qua việc
định nghĩa hàm này bằng cách thêm
=0
(bằng không) vào phần khai báo hàm.
Lớp
CPolygon
có thể được định nghĩa như sau:
// abstract class CPoligon
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
virtual int area (void) =0;
};
Hãy chú ý cách chúng ta thêm
=0
vào
virtual int area (void)
thay vì định
nghĩa đầy đủ cho hàm. Kiểu hàm này có tên là là pure virtual function (hàm ảo
thuần tuý) và tất cả các lớp chứa bất kì một hàm ảo thuần tuý nào đều được coi
là lớp trừu tượng cơ sở.
Sự khác biệt lớn của một lớp trừu tượng cơ sở là không thể tạo được các đối
tượng thuộc lớp. Nhưng chúng ta có thể tạo các con trỏ trỏ đến chúng. Vì vậy
một khai báo như sau:
CPolygon poly;
sẽ là không hợp lệ cho lớp trừu tượng cơ sở được khai báo ở trên. Tuy nhiên
con trỏ:
CPolygon * ppoly1;
CPolygon * ppoly2