Từ Khoá Virtual Trong C++

Cập nhật thông tin chi tiết về Từ Khoá Virtual Trong C++ mới nhất ngày 21/09/2020 trên website Zdungk.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 2,574 lượt xem.

Từ khoá virtual có một số đặc tính khá thú vị mà mình muốn chia sẻ với các đồng chí ngày hôm nay. Bài viết có vẻ hơi dài hơn mức cần thiết nhưng đừng ngại, tại mình copy paste code hơi nhiều thôi.

Tác dụng của từ khoá virtual, tại sao cần có virtual function.

Một số tài liệu có viết công dụng của Virtual Function như sau:

Virtual Function là để khai báo một function ở class cha (base class) mà sau đó các class kế thừa (derived class) có thể override function đó

Nhưng chờ đã, có gì không ổn ở chỗ này, nếu chỉ là để override thôi thì mình hoàn toàn có thể khai báo function ở base class mà không cần virtual thì vẫn được cơ mà. Vậy ko lẽ đồng chí Virtual Function này vô dụng? Để làm rõ vấn đề cũng như hạn chế buồn ngủ vì phải đọc quá nhiều chữ, chúng ta thử xét ví dụ nhỏ sau:

class Buffalo { public: void action(){printf("I'm eating grassn");}; }; class YoungBuffalo : public Buffalo { void action(){printf("I'm typing keyboardn");}; }; int main() { Buffalo *elon = new Buffalo(); YoungBuffalo *andy = new YoungBuffalo(); elon->action(); andy->action(); } 

Output sẽ ra như thế này:

I'm eating grass I'm typing keyboard 

Nếu chỉ xét đến đây thì cậu virtual chắc sẽ hơi buồn vì mọi chuyện có vẻ vẫn ổn mà không cần đến sự có mặt của nó. Vì vậy chúng ta thử xét tiếp 1 ví dụ khác để làm chỗ cho virtual toả sáng một chút.

class Buffalo { public: void action(){printf("I'm eating grassn");}; }; class YoungBuffalo : public Buffalo { public: void action(){printf("I'm typing keyboardn");}; }; int main() { Buffalo *elon = new Buffalo(); Buffalo *andy = new YoungBuffalo(); // khác với lúc nãy là YoungBuffalo *andy = new YoungBuffalo(); elon->action(); andy->action(); } 

Lần này output sẽ là như thế này:

I'm eating grass I'm eating grass 

Đến đây thì chắc không cần phải quá tinh mắt bạn cũng đã nhận ra vấn đề rồi đúng không. Mặc dù andy được tạo ra từ constructor của class YoungBuffalo thế nhưng nó hành xử lại như thể nó là một Buffalo. Thế nhưng ví dụ này trông hơi bị thiếu thông minh vì chả mấy ai khai báo Buffalo *andy = new YoungBuffalo(); như này để tự làm khó mình cả. Mình sẽ xét một ví dụ thực tế hơn chút nữa.

class Buffalo { public: void action(){printf("I'm eating grassn");}; }; class YoungBuffalo : public Buffalo { public: void action(){printf("I'm typing keyboardn");}; }; void takeAnBuffalo(Buffalo* buffalo){ buffalo->action(); } int main() { Buffalo *elon = new Buffalo(); Buffalo *andy = new YoungBuffalo(); takeAnBuffalo(elon); takeAnBuffalo(andy); } 

Output sẽ vẫn lại là:

I'm eating grass I'm eating grass 

Lúc này thì vấn đề thực sự đã rõ rồi, vì vậy chúng ta sẽ fix với vấn đề này với virtual như sau:

class Buffalo { public: virtual void action(){printf("I'm eating grassn");}; // thêm virtual vào chỗ này }; class YoungBuffalo : public Buffalo { public: void action(){printf("I'm typing keyboardn");}; }; void takeAnBuffalo(Buffalo* buffalo){ buffalo->action(); } int main() { Buffalo *elon = new Buffalo(); Buffalo *andy = new YoungBuffalo(); takeAnBuffalo(elon); takeAnBuffalo(andy); } 

Output:

I'm eating grass I'm typing keyboard 

Hoàn hảo! Lần này thì ai đã làm việc của người đó, Buffalo đã ăn cỏ, và YoungBuffalo đã gõ bàn phím. Ta sẽ đi đến mục tiếp theo.

Virtual Destructor

Virtual destructor cũng giống như các hàm virtual bình thường và được khai báo bằng cách thêm từ khoá virtual đằng trước hàm destructor. Nhưng trước khi học cách sử dụng virtual destructor, chúng ta sẽ nhìn qua một ví dụ mà không có virtual destructor.

class Animal { public: ~Animal(){printf("This is Animal's destructorn");}; }; class Cat : public Animal { public: ~Cat(){printf("This is Cat's destructorn");}; }; int main() { Animal* tom = new Cat(); delete tom; } 

Output:

This is Animal's destructor 

Chúng ta có thể thấy ngay là destructor của class Cat đã không được gọi, mặc dù tom được khởi tạo bằng constructor của class Cat. Điều này thật sự rất nguy hiểm, vì destructor của class Cat không được gọi nên các đối tượng riêng của lớp đó cũng không được giải phóng và vì thế object tom chỉ được giải phóng 1 phần tài nguyên, điều này gây ra rò rỉ bộ nhớ (hiện tượng bộ nhớ đã được cấp phát không thu hồi lại được). Để khắc phục chúng ta thêm từ khoá virtual vào trước destructor của base class.

class Animal { public: virtual ~Animal(){printf("This is Animal's destructorn");}; }; class Cat : public Animal { public: ~Cat(){printf("This is Cat's destructorn");}; }; int main() { Animal* tom = new Cat(); delete tom; } 

Output:

This is Cat's destructor This is Animal's destructor 

Virtual destructor là một thứ rất quan trọng khi bạn làm việc với C++, nếu bạn có ý định cho phép kế thừa class mà bạn đang viết thì bạn bắt buộc phải thêm virtual destructor cho class đó, ngược lại thì bạn đang ngầm ám chỉ rằng class của bạn không cho phép kế thừa. Điều này tương đương với từ khoá final trong Java. Nếu bạn thấy một class không có virtual destructor, đơn giản là đừng có kế thừa nó, vì nó đi không đúng với ý định của người viết ra class, và có thể gây ra thiệt hại hệ thống nếu bạn cố tình bỏ qua.

Tham khảo

Why do we need Virtual Methods in C++?

When to use virtual destructors?

Liên quan

Ethernet Switch Có Chức Năng Gì? - Xem 21,186

Ethernet Switch có chức năng gì? Switch là một thiết bị chọn lựa đường dẫn để gửi frame đến đích, hoạt động ở Lớp 2 của mô hình OSI. Đôi khi Switch còn được gọi là Bridge đa port hay Hub chuyển mạch. Switch quyết định chuyển frame dựa trên ... Khi hai máy thực hiện liên lạc với nhau, Switch chỉ thiết lập một mạch ảo giữa hai cổng tương ứng mà không làm ảnh hưởng đến lưu thông trên các cổng khác. Do đó, mạng LAN có hiệu suất hoạt động cao thường sử dụng chuyển mạch toàn bộ. Switch tập trung các kết nối và quyết định chọn đường dẫn để truyền dữ liệu hiệu quả. Frame được chuyển mạch từ cổng nhận vào đến


Oxit Axit Là Gì? Tính Chất Hóa Học Và Hướng Dẫn Bài Tập Oxit Axit - Xem 18,315

Oxit axit là các oxit khi tác dụng với nước sẽ tạo ra axit, tác dụng với kiềm tạo thành muối hóa học. Oxit axit thường là oxit của phi kim ứng với một axit hoặc kim loại có hóa trị cao. Vậy tính chất hóa học của oxit axit ... Oxit axit thường là oxit của phi kim ứng với một axit hoặc kim loại có hóa trị cao. Vậy tính chất hóa học của oxit axit là gì? Cách giải bài tập oxit axit tác dụng với bazo như thế nào? Cách gọi tên oxit axit Tên oxit axit: (Tên tiền tố chỉ số nguyên tử của phi kim) + Tên phi kim + (tên tiền tố chỉ số nguyên tử oxi) + ''Oxit'' Tính chất hóa học của oxit axit Trừ SiO 2 thì hầu hết các oxit axit


Drama Là Gì ? Ý Nghĩa Của Từ Drama Trên Facebook Là Gì? - Xem 15,741

Xã hội ngày càng phát triển kéo theo nhiều trào lưu xuất hiện, các thuật ngữ, ngôn từ mới lạ ngày càng nhiều trên các mạng. Những nội dung, các câu chuyện có tính chất kịch tính, gay cấn kéo dài luôn dành được sự quan tâm của các bạn ... Hay xem cho thỏa lòng của các bạn rồi trở thành những anh hùng bàn phím. Vội phán xét người khác, quy chụp định tội họ một cách phiến diện. Nhất là khi chưa rõ sự thật có phải đúng là những gì được thông tin đưa ra hay không. Để rồi đôi khi hệ lụy là những câu chuyện thương tâm đẩy người trong


Kimochi Yamate Là Gì? Ý Nghĩa Của I Cư Kimochi Yamete Trong Tiếng Nhật? - Xem 11,088

Kimochi Yamate hay i cư kimochi và i kư kimochi là những thuật ngữ, cụm từ được sử dụng khả phổ biến trong thời đại hiện nay. Nhưng bạn có thật sự hiểu được nghĩa của từ kimochi là gì? Ở bài viết dưới đây, Zdungk.com sẽ giải đáp toàn ... Và được sử dụng nhiều với hàm nghĩ khi mà nam giới thoả mãn bạn giới của mình và ngược lại. Cho nên khi sử dụng kimochi trong ngữ cảnh này khá nhạy cảm nên các bạn trẻ nên lưu ý khi sử dụng để tránh gây khiếm nhã nhé. Tại sao các bạn trẻ lại thường xuyên sử dụng kimochi với hàm nghĩa trên? Đây là điều hoàn toàn dễ hiểu bởi chúng ta thường biết rằng, Nhật Bản là nơi có


Đa Dạng Sinh Học Là Gì? Nguyên Nhân, Biện Pháp Hạn Chế Suy Giảm Đa Dạng Sinh Học - Xem 10,890

Đa dạng sinh học là sự phong phú của nhiều nhiều dạng, loài và các biến dị di truyền của mọi sinh vật trong đời sống tự nhiên, sự đa dạng và phong phú này được chia làm nhiều cấp độ tổ chức sinh giới đặc biệt là với các ... chúng ta có thể tìm hiểu thêm về nguyên nhân gì khiến cho đa dạng thực vật ở Việt Nam bị giảm sút cũng như ở thế giới trong phần tiếp theo của bài viết dưới đây! Sự suy giảm đa dạng di truyền Được xem là một trong những nguyên nhân quan trọng cho việc suy giảm đa dạng sinh học trên thế giới, theo thống kế trên toàn thế giới hiện nay có khoảng 492 quần thể khác biệt và loài cây di


Giải Vbt Vật Lý Lớp 6 - Xem 10,890

Giải bài tập môn Vật lý 6 Giải VBT Vật lý lớp 6 – Bài 8: Trọng lực – Đơn vị lực là tài liệu tham khảo môn Vật lý 6 hay dành cho các em học sinh, giúp các em ôn tập và củng cố kiến thức đã học ... Kết luận Câu C5 trang 32 VBT Vật Lí 6: Lời giải: Trọng lực có phương thẳng đứng và có chiều từ trên xuống dưới. IV -VẬN DỤNG Câu C6 trang 32 VBT Vật Lí 6: Lời giải: Phương thẳng đứng và mặt phẳng nằm ngang là vuông góc với nhau. Ghi nhớ: - Trọng


Z Là Gì Trong Toán Học? - Xem 10,197

Bạn có từng nghe về tập hợp R trong toán học chưa? Hẳn là rất rất quen phải không? Dĩ nhiên rồi vì lớp 6 lớp 7 chúng ta được học cái này mà. Vậy Z là gì trong toán học nhỉ? “Tập hợp Z là tập hợp các số ... Vậy Z là gì trong toán học nhỉ? "Tập hợp Z là tập hợp các số nguyên âm, số nguyên dương và số 0. Z= {...; -2; -1; 0; 1; 2; ...}" VD: -10; -9; -8; 100 ; 0 đều thuộc tập hợp Z Tập hợp z trong toán học còn có một tên gọi khác là số nguyên. Tập hợp số nguyên chỉ ra các số nguyên là miền xác định nguyên duy nhất mà các phần tử dương của nó được sắp thứ tự tốt và các thứ tự đó


Tb Là Gì Trên Facebook? - Xem 9,900

TB nghĩa là gì? TB là viết tắt của từ gì? TB là 1 từ viết tắt có rất nhiều nghĩa tiếng việt và tùy từng ngữ cảnh mà ta hiểu nó sẽ có nghĩa là gì, dưới đây là các nghĩa hay được sử dụng nhất của từ viết ... Đơn vị này cao cấp hơn Gigabyte - GB. 1 TB = 1024 GB 5 TB = 5120 GB 10 TB = 10240 GB Ví dụ: Bạn có ổ cứng dung lượng 2 TB tức là ổ cứng của bạn bằng 2048 GB Một bộ phim, thư mục, video có dung lượng 1TB tức là 1048 GB -phim HD dung lượng cao. Vậy nếu bạn thấy đứng đằng trước TB là 1 con số thì nó thường là viết tắt của cụm từ Terabyte TB trên Facebook nghĩa là gì? Đối với


Số Cvv/cvc Trên Thẻ Atm Vietcombank Là Gì? - Xem 9,405

Số Cvv/Cvc trên thẻ atm đang được rất nhiều chủ thẻ quan tâm. Nhất là với những người dùng thẻ atm Vietcombank. Vậy số Cvv/Cvc trên thẻ atm vietcombank là gì? Bị lộ có sao không? Số Cvv/Cvc trên thẻ atm vietcombank là gì? Không phải ai dùng thẻ atm ... Tốt nhất là nhớ trong đầu sẽ an toàn nhất, không lo bị lộ. Những lưu ý để sử dụng thẻ tín dụng an toàn Những mẹo nhỏ dưới đây sẽ giúp các bạn sử dụng thẻ tín dụng an toàn hơn. Bảo mật thông tin thẻ tín dụng Dù là thẻ ghi nợ hay thẻ tín dụng. Thì việc bảo mật thẻ của mình là điều vô cùng quan trọng. Tốt hơn hết là không nên đưa thẻ tín dụng của mình cho người khác


Mã Zip Iphone Là Gì? - Xem 8,910

Zip Code (mã zip) là một trong những khái niệm không quá xa lạ đối với thế hệ trẻ. Chúng liên quan trực tiếp tới quy trình giao – Nhận bưu kiện khi mua sắm online hay đặt hàng thông qua các ứng dụng giao dịch trực tuyến. Không chỉ ... Mã zip này sẽ giúp Apple quản lý tốt hơn thiết bị, đồng thời hỗ trợ bạn trong quá trình sử dụng/ bảo hành sau này. Trong khi đó, mã Zip Code bưu điện thường không cung cấp những thông tin cơ bản về cá nhân hay phương thức thanh toán của người nhận. Các loại mã này chỉ đơn giản biểu thị địa chỉ giao - Nhận hàng nhằm hỗ trợ tối đa cho quá trình vận chuyển bưu phẩm. Mã Zip Code


Đề xuất

Outbound Là Gì ? Sự Khác Biệt Giữa Inbound Và Outbound - Xem 2,574

Outbound là một trong những thuật ngữ du lịch thường được nhắc đến nhiều, đặc biệt là khi bạn đi du lịch nước ngoài. Nhưng bạn đã thực sự hiểu rõ thuật ngữ thông dụng này chưa? Nếu chưa, hãy cùng Travelgear tìm hiểu Outbound là gì? Du lịch outbound ... Bạn có thời gian để nghiên cứu và tìm kiếm bất kỳ thông tin nào, chẳng hạn như email tiếp thị họ đã mở và nhấp, các sự kiện hoặc hội thảo trên web mà họ đã tham dự hoặc blog họ đọc và chia sẻ trên mạng xã hội. Trong khi inbound call


Add Là Gì Trên Facebook? - Xem 4,158

” Add” là từ tiếng Anh, có nghĩa tiếng Việt là ” thêm vào“.Từ này phiên âm là ” ét“, nhưng nhiều người Việt Nam hay nói nhầm thành ” ép ” và hiểu nhầm ý nghĩa của nó. Mỗi khi bạn nói chuyện với ai đó mà họ nói ... Điều đó có nghĩa là họ đang yêu cầu bạn đồng ý thêm họ là bạn bè ở facebook, mời họ vào nhóm nào đó trong facebook. Ví dụ: Cô gái này thật thú vị, mình phải "add" thôi: cô gái này thật thú vị, mình phải kết bạn (online) thôiBạn " add" mình vào nhóm với nhé: bạn thêm mình vào nhóm với nhé.Ngoài ra, " Add" cũng có thể là viết tắt của từ Address có nghĩa là địa chỉ. . .


Essence Là Gì? Top 5 Sản Phẩm Essence Chị Em Nào Cũng Phải Có - Xem 2,574

Nếu đang tìm kiếm biện pháp dưỡng da và chăm sóc da chuyên biệt, essence chính là phương pháp bạn nên lựa chọn. Chúng mang tới hiệu quả cao gấp nhiều lần so với các dòng serum hay các mỹ phẩm khác. Vậy Essence là gì? Đâu là dòng essence ... Giá của sản phẩm: khoảng 1 triệu đồng/ 200ml Bio-Essence Collagen Essence Bio-essence là thương hiệu mỹ phẩm đến từ Singapore, chúng được rất nhiều phụ nữ châu Á yêu thích. Dòng essence này vô cùng thích hợp với các cô nàng sở hữu làn da lão hóa, da


Tập Hợp Con (Toán Học) - Xem 3,564

Trong Toán học, đặc biệt trong lý thuyết tập hợp, tập hợp A là một tập con (hay tập hợp con) của tập hợp B nếu A “được chứa” trong B. Quan hệ một tập là tập con của tập khác được gọi là quan hệ bao hàm. Nếu A ... Tuy nhiên, nếu chi li ra thì ký hiệu được hiểu rằng A là tập con của B hoặc có thể bằng B, còn ký hiệu ít mang ý nghĩa A có thể bằng B hơn. Tương tự như vậy trong số học, khi viết thì x có thể nhỏ hơn y, có thể bằng y, nhưng nếu viết


Lotion Có Nghĩa Là Gì? Là Chất Gì? Mua Ở Đâu? - Xem 5,346

Nhiều người thắc mắc Lotion có nghĩa là gì? là chất gì? mua ở đâu? Bài viết hôm nay chia sẻ quan điểm sẽ giải đáp điều này. Lotion có nghĩa là gì? là chất gì? mua ở đâu? Lotion có nghĩa là gì? là chất gì? Lotion là một ... Lotion thường thích hợp với những loại da nhờn, da khô hoặc da hay nứt nẻ. Lotion thường được dùng vào những ngày hè nóng bức hoặc khi tiếp xúc ánh nắng nhiều, hay da mặt thường xuyên ra chất nhờn khi sử dụng lotion da sẽ có cảm giác mát và giúp lỗ chân thông được thông thoáng hơn và tạo cảm giác dễ chịu cho người dùng. Những loại lotion có trên


Bạn đang xem bài viết Từ Khoá Virtual Trong C++ trên website Zdungk.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!