Khai báo đối tượng (object) trong lập trình hướng đối tượng (OOP)
1. Khai báo đối tượng (object) Sau khi định nghĩa lớp, ta có thể khai báo...
Kết quả sẽ mở trong tab mới, giới hạn trong website này.
Truy cập nhanh
Tìm kiếm gần đây
Trước khi tìm hiểu về hàm thuần ảo (pure virtual function), các bạn nên có kiến thức về kế thừa và hảm ảo. Các bạn có thể đọc lại các bài sau: Khái niệm kế thừa và đơn kế thừa trong lập trình hướng đối tượng Hàm ảo (virtual function) trong lập trình hướng đối […]
Trước khi tìm hiểu về hàm thuần ảo (pure virtual function), các bạn nên có kiến thức về kế thừa và hảm ảo. Các bạn có thể đọc lại các bài sau:
Hàm thuần ảo (pure virtual function) được sử dụng khi:
Ví dụ, chúng ta có một lớp cơ sở là Shape. Các lớp dẫn xuất của lớp Shape là Triangle, Square và Circle. Chúng ta muốn tính diện tích của các hình này.
Chúng ta có thể tạo ra một hàm thuần ảo có tên là calculateArea() trong lớp Shape. Các lớp Triangle, Square và Circle phải định nghĩa lại hàm calculateArea() với công thức tính diện tích khác nhau cho mỗi hình.
Hàm thuần ảo không có thân hàm và bắt buộc phải kết thúc với “= 0”.
class Shape{
public:
// creating a pure virtual function
virtual void calculateArea() = 0;
};
Lưu ý: Cú pháp “= 0” không phải là gán hàm thuần ảo có giá trị bằng 0. Nó chỉ là cú pháp cho biết đó là hàm thuần ảo (pure virtual function).
Một lớp bao gồm hàm thuần ảo được gọi là lớp trừu tượng (abstract class). Trong ví dụ ở phần 1, Shape là một lớp trừu tượng.
Chúng ta không thể tạo ra các đối tượng của một lớp trừu tượng. Mục đích chính của lớp trừu tượng là để các lớp khác kế thừa lại.
#include <iostream>
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;
}
};
void main(){
Square square;
Circle circle;
cout << "Enter the length of the square: ";
square.getDimension();
cout << "Area of square: " << square.calculateArea() << endl;
cout << "\nEnter radius of the circle: ";
circle.getDimension();
cout << "Area of circle: " << circle.calculateArea() << endl;
system("pause");
}
Enter the length of the square: 5
Area of square: 25
Enter radius of the circle: 9
Area of circle: 254.34
Hàm thuần ảo calculateArea() được khai báo trong lớp trừu tượng Shape. Các lớp dẫn xuất Square và Circle phải định nghĩa lại hàm calculateArea() nếu không chương trình sẽ báo lỗi.