VIRTUAL FUNCTION (HÀM ẢO), OVERRIDE VÀ FINAL

Virtual function (hàm ảo)

Virtual function giống như một hàm vượt tải, tuy nhiên điều quan trọng đặc biệt ở chỗ này là: thứ hạng tài liệu, con số cùng hình trạng dữ liệu của những tmê man số của hàm ảo ở cả hai lớp các đại lý và dẫn xuất gần như như nhau ! Hàm ảo là thành phần của một tờ, được knhị báo vào lớp cửa hàng rồi nhưng mà lại được khai báo lại vào lớp dẫn xuất với keyword “virtual” ngơi nghỉ đằng trước. Không cần bất chợt tín đồ ta làm cho điều đó có hại, hàm ảo khiến cho tính đa hình trong c++ là bởi vì nói theo một cách khác một “giao diện” đến những cách tiến hành. Tức là với 1 thông điệp kia thôi nhưng mà mang lại các kết quả khác nhau Lúc con trỏ của lớp đại lý trỏ mang đến đối tượng người tiêu dùng của một tờ như thế nào kia (không nói đến bé trỏ của lớp dẫn xuất do nó cần thiết trỏ mang đến đối tượng của lớp các đại lý được !).

Bạn đang xem: Virtual function (hàm ảo), override và final

Để khai báo hàm ảo, bạn thêm từ khóa virtual trước thương hiệu hàm. Hãy quan sát và theo dõi ví dụ minch họa sau nhằm phát âm hơn cách hàm ảo làm việc.

Ví dụ:

#include#includeusing namespace std;class sun{ public: virtual void showcty() coutdisplay(); p->showcty(); coutdisplay(); p->showcty(); return 0;Kết quả:

P tro toi sun:Trung cất cánh sun:Hien thi sun:Phường tro toi sun1:Trung cất cánh sun:Hien thi sun1:Chú ý:

Còn một điều xứng đáng chú ý nữa, hàm ảo này rất có thể không được tư tưởng trong lớp cửa hàng nhưng mà chỉ được khai báo thôi! VD: virtual void setsun(int i)=0. Lúc này họ Gọi nó là “hàm ảo thuần tuý”.

lấy ví dụ như tiếp theo:

#include using namespace std;class Sun{public: ~Sun() { cout Kết quả:

This is Sun*Ở ví dụ trên hàm diệt của Sunclass ko được tư tưởng là virtual nên lúc ta bỏ con trỏ sun hàm hủy của Sun1 không được call. Nên ta khái niệm hàm hủy của Sun class là virtual.

Override và final

Override là vấn đề viết lại một phương thức (method) vào lớp dẫn xuất (derived class) nhưng sinh hoạt lớp đại lý (base class).

Xem thêm: Due To The Fact That Là Gì, Cách Dùng Cấu Trúc Due To Giúp Bạn Đạt Điểm Cao

Nlỗi họ đã biết để lớp dẫn suất override 1 virtual function của base class thì 2 hàm yêu cầu tất cả thuộc thương hiệu, cùng tham số cùng thuộc kiểu dáng dữ liệu trả về. Tuy nhiên trong không ít ngôi trường hợp ta rất có thể xẩy ra nhầm lẫn Khi override 1 virtual function.

Ví dụ:

class Sun{public: virtual void Thongtin() { cout Trong ví dụ bên trên hàm CSun1::Thongtin khong co override hàm Sun::Thongtin vày hàm CSun1::Thongtin là const còn hàm Sun::Thongtin thì không phải.

Trong phiên phiên bản C++11 gồm hỗ trợ thêm 1 từ khóa là override, ý nghĩa của từ khóa này sẽ giúp đỡ ta điều hành và kiểm soát câu hỏi một hàm bao gồm thật sự là override một thủ tục của lớp cơ mà nó đang kế thừa hay không, nếu như không tồn tại phương thức mà lại nó vẫn "nghĩ" rằng nó đã override tại lớp cơ mà nó kế thừa thì trình biên dịch sẽ báo lỗi khi biên dịch. Ta thêm tự khóa override vào thời điểm cuối tên thủ tục nlỗi sau.

class Sunpublic:char* getThongtinsun(int sign)if (sign > 0)return "Sun";; class CSun1: public Sunpublic:char* getThongtinsun(char sign) overrideif (sign > 0)return "CSun1";;Trong nhiều ngôi trường thích hợp ta không thích lớp dẫn suất override 1 virtual function vào base class. C++ 11 hỗ trợ cho ta tự khóa final nhằm triển khai vấn đề này. Virtual function được lưu lại là final sẽ không còn được cho phép override ở lớp dẫn suất. Nếu lớp dẫn suất vẫn override thì trình biên dịch đã báo lỗi.

ví dụ như :

class Sun{public: virtual void Thongtin() final { cout Trên đấy là 1 số ít tìm hiểu của tôi về Virtual function, override với final cảm ơn chúng ta vẫn hiểu.

Link tsay mê khảo:

https://deepcpp.com/

https://kipalog.com/posts/Tu-khoa-virtual-trong-C--702eb516-7ea6-472c-a812-42c0733d6c33

Leave a Reply

Your email address will not be published. Required fields are marked *