Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các hàm ảo trừu tượng và các lớp trừu tượng với sự trợ giúp của các ví dụ.
Trước khi chúng ta tìm hiểu về các hàm ảo thuần túy, hãy nhớ xem các hướng dẫn sau:
- Kế thừa C ++
- Các hàm ảo C ++
Các hàm ảo thuần túy trong C ++
Các chức năng ảo thuần túy được sử dụng
- nếu một hàm không có bất kỳ công dụng nào trong lớp cơ sở
- nhưng hàm phải được thực thi bởi tất cả các lớp dẫn xuất của nó
Hãy lấy một ví dụ,
Giả sử, chúng tôi đã có nguồn gốc Triangle
, Square
và Circle
các lớp học từ Shape
lớp, và chúng tôi muốn để tính toán diện tích của tất cả các hình dạng.
Trong trường hợp này, chúng ta có thể tạo một hàm ảo thuần túy có tên calculateArea()
trong Shape
. Vì nó là một hàm ảo thuần túy, tất cả các lớp thừa kế Triangle
, Square
và Circle
phải bao gồm các calculateArea()
chức năng triển khai.
Một hàm ảo thuần túy không có thân hàm và nó phải kết thúc bằng = 0
. Ví dụ,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Lưu ý: Các = 0
cú pháp không có nghĩa là chúng ta đang gán từ 0 đến hàm. Đó chỉ là cách chúng ta định nghĩa các hàm ảo thuần túy.
Lớp trừu tượng
Một lớp có chứa một hàm ảo thuần túy được gọi là một lớp trừu tượng. Trong ví dụ trên, lớp Shape
là một lớp trừu tượng.
Chúng ta không thể tạo các đối tượng của một lớp trừu tượng. Tuy nhiên, chúng ta có thể lấy các lớp từ chúng, và sử dụng các thành viên dữ liệu và các hàm thành viên của chúng (ngoại trừ các hàm thuần ảo).
Ví dụ: Lớp trừu tượng C ++ và Hàm ảo thuần túy
// C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )
Đầu ra
Nhập độ dài để tính diện tích hình vuông: 4 Diện tích hình vuông: 16 Nhập bán kính để tính diện tích hình tròn: 5 Diện tích hình tròn: 78,5
Trong chương trình này, virtual float calculateArea() = 0;
bên trong Shape
lớp là một hàm thuần ảo.
Đó là lý do tại sao chúng ta phải cung cấp việc triển khai calculateArea()
trong cả hai lớp dẫn xuất của chúng ta, nếu không chúng ta sẽ gặp lỗi.