Phân Biệt Abstract Class Và Interface Trong C++

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Interface la gi c để tối ưu hóa nội dung trang web và tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích từ khóa và chiến lược hiệu quả. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi để cập nhật kiến thức mới.

Abstract class và Interface là hai khái niệm cơ bản trong lập trình hướng đối tượng người dùng, tuy nhiên trong C++ thì việc phân biệt abstract class và interface không đơn giản như những tiếng nói khác. Cùng tìm hiểu trong nội dung bài viết sau nhé.

Bạn Đang Xem: Phân Biệt Abstract Class Và Interface Trong C++

Abstract class là gì?

Abstract class là một class không có thông tin về nội dung thực hiện và bắt buộc cái subclass (class con) phải khái niệm các phương thức ở lớp abstract. Với lớp abstract, tất cả chúng ta có thể công khai mặt tiền tài object nhưng vẫn giấu đi các tiến trình setup ở phía sau. Ví dụ với lớp string, tất cả chúng ta chỉ có gọi phương thức toUpperCase() để biến chuỗi thường thành chuỗi in hoa mà không cần quan tâm đến phương thức này được setup như nào. Abstract class giúp tất cả chúng ta đạt được tính đa hình lúc Runtime, tức là cùng một class có thể cho ra nhiều biến thể mà biến thể đó không phải được khái niệm ở lớp abstract mà được khái niệm ở lớp con của nó. Việc call hàm đối tượng người dùng của lớp dẫn xuất thông qua con trỏ của lớp cơ sở (lớp abstract) sẽ tiến hành quyết định lúc Runtime. Các bạn cần phải hiểu được đa hình trong Compile và đa hình trong Runtime ở nội dung bài viết này nhé.

Ví dụ về việc setup và sử dụng một lớp abstract trong C++.

Kết quả sau thời điểm chạy Khóa học.

Xem Thêm : Wechat là gì? Hướng dẫn cách sử dụng wechat

Giảng giải:

Trong C++ tất cả chúng ta không có từ khóa abstract để compiler hiểu rằng đây là một lớp abstract mà tất cả chúng ta phải khai báo một hàm ảo trong lớp đó để lớp con (lớp thừa hưởng) ghi đè(overriding) lại phương thức đó. Ở code phía trên class Computer là một lớp abstract được khai báo với hàm ảo(virtual function) là hàm Model. Ở lớp con Lenovo ghi đè lại phương thức Model ở lớp Computer. Trong hàm main tất cả chúng ta khai báo con trỏ của lớp Computer trỏ vào vùng nhớ của lớp con và gọi hàm Model thì lúc này hàm Model được ghi đè ở lớp con được gọi. Tương tự con trỏ của lớp abstract trỏ vào vùng nhớ của lớp Dell và gọi hàm Model ra thì hàm Model của lớp Dell sẽ tiến hành ghi đè. Nếu không khai báo hàm Model ở lớp Computer là hàm ảo thì trình biên dịch sẽ gọi hàm Model tại lớp cơ sở. Thử xem có ra kết quả như phía dưới không nhé.

Interface là gì?

Trong C++ việc khai báo một interface có tức thị tất cả chúng ta khai báo với class với hàm thuần ảo và một phương thức hủy ảo (virtual destructor). Tới đây tất cả chúng ta tìm hiểu một tí về hàm thuần ảo trong C++ nhé. Hàm thuần ảo được khai báo với cú pháp như sau.

virtual <data_typevàgt; <function_namevàgt;(<parametervàgt;) = 0;

Ví dụ:

Xem Thêm : Làm quen với Android Studio

Ở đây tôi khai báo lớp IShape (khai báo class với chữ “I” trước tên class để khắc ghi cho những người đọc code biết rằng đây là một interface, đây là một chuẩn coding trong C++) có một phương thức thuần ảo là phương thức tinnhDienTich(). Lưu ý chỉ có hàm được khắc ghi với từ khóa virtual thì mới có thể được gán bằng 0. Tất cả chúng ta có thể hiểu hàm tinnhDienTich()có thể dùng làm tính diện tích S cho hình chữ nhật, hình tròn, hình vuông,… Như vậy nếu tất cả chúng ta tạo một class Rectangle thừa hưởng class IShape và khái niệm lại phương thức tinnhDienTich() để tính diện tích S hình chữ nhật thì sẽ thu được đa hình trong Runtime tương tự như abstract class.

Có thể hiểu Interface là một bản mô tả hành vi hoặc khả năng của một class mà không đưa ra cách thực hiện cụ thể của class đó ra làm sao.

Vậy khi nào dùng abstract class, khi nào dùng interface?

Tới đây chắc sẽ sở hữu nhiều bạn thắc mắc abstract class khác thế quái nào interface. Thoạt đầu khi tiếp cận với hai khái niệm này tôi cũng như các bạn không biết khi nào dùng abstract class khi nào dùng interface. Giả sử tất cả chúng ta có một lớp abstract Xe có tính chất động cơ và phương thức phát động và tắt máy. Xe máy, xe xe hơi, xe tải,… đều phải có chung phương thức và tính chất của lớp Xe. Vậy có thể hiểu abstract class như thể một bản thiết kế chung cho tất cả những class, nó thay mặt cho quan hệ “IS-A”(Xe hơi là Xe).

Interface giống như một bản hợp đồng vậy, bất kì lớp nào triên khai một interface đó thì phải đồng ý với bản thiết kế mà interface đó đưa ra. Ví dụ xe bus có thể chở khách còn xe tải có hàng. Việc chở khách hay chở hàng là một phương thức không bắt buộc khi đối chiếu với lớp xe nên ta tạo interface ChoKhach và ChoHang để lớp XeBus và XeTai có thể implement nó. Vậy tất cả chúng ta cần interface khi tất cả chúng ta cần cung cấp các phương thức bổ sung cho một class mà những phương thức này sẽ không bắt buộc khi đối chiếu với class đó, nó thay mặt cho quan hệ “LIKE-A”(Xe bus có thể chở khách).

Lời kết

Qua nội dung bài viết này tôi đã hướng dẫn các bạn cách setup abstract class và interface trong C++ cũng như biết khi nào nên sử dụng chúng. Tuy cách setup có khác so với những tiếng nói bậc cao sau này như Java hay C# nhưng về thực chất thì vẫn không thay đổi.

You May Also Like

About the Author: v1000