Ở bài này, chúng ta sẽ khám phá hàm ảo (virtual function) vào C++. Bài này có các kỹ năng và kiến thức liên quan lại đến bé trỏ đối tượng. Các chúng ta cũng có thể đọc lại bài Khai báo và sử dụng con trỏ đối tượng người dùng trong C++ để thấy lại kiến thức và kỹ năng đó.
Bạn đang xem:
1. Hàm ảo (virtual function) là gì?
Hàm ảo (virtual function) là một trong hàm member trong lớp cửa hàng mà lớp dẫn xuất khi kế thừa cần phải định nghĩa lại.Hàm ảo được thực hiện trong lớp các đại lý khi cần đảm bảo hàm ảo đó sẽ được định nghĩa lại vào lớp dẫn xuất. Câu hỏi này rất quan trọng trong ngôi trường hợp nhỏ trỏ gồm kiểu là lớp đại lý trỏ đến đối tượng người sử dụng của lớp dẫn xuất.Để gọi tại sao phải áp dụng hàm ảo, bọn họ cùng chăm chú một ví dụ:class Base{public:void print(){coutLớp Derived kế thừa public từ bỏ lớp Base. Bọn họ tạo một con trỏ (pointer) bao gồm kiểu là lớp Base trỏ cho một đối tượng người tiêu dùng của lớp Derived. Sau đó, call hàm print() thì bản chất là call hàm print() của lớp Base. Mà họ muốn là đề nghị gọi cho hàm print() của lớp Derived bởi bé trỏ sẽ trỏ đến đối tượng người dùng của lớp Derived.void main()Derived derived1;Base* base1 = &derived1;//calls function of Base classbase1->print();system("pause");Kết quảBase classĐể tránh sự cố này, chúng ta khai báo hàm print() vào lớp Base là một hàm ảo. Thời gian này, lớp dẫn xuất cần định nghĩa lại hàm ảo đó. Khi hotline hàm print() trải qua con trỏ thì sẽ gọi đến hàm được tư tưởng lại vào lớp dẫn xuất.Hàm ảo là một phần không thể thiếu hụt để thể hiện tính nhiều hình trong kế thừa được cung cấp bởi mối cung cấp ngữ C++.Lưu ý: con trỏ của lớp cơ sở rất có thể chứa địa chỉ cửa hàng của đối tượng thuộc lớp dẫn xuất, nhưng trái lại thì ko được.2. Định nghĩa hàm ảo (virtual function)
Sử dụng từ khóa virtual để định nghĩa một hàm ảo vào lớp cơ sở. Lớp dẫn xuất kế thừa từ lớp đại lý phải định nghĩa lại hàm ảo.#include using namespace std;class Base{public:virtual void print()//virtual functioncoutprint();system("pause");Kết quảDerived class
Hàm ảo chỉ khác hàm thành phần thường thì khi được điện thoại tư vấn từ một bé trỏ. áp dụng hàm ảo khi ao ước con trỏ đang trỏ tới đối tượng người tiêu dùng của lớp nào thì hàm yếu tố của lớp đó sẽ tiến hành gọi mà không xem xét mang lại kiểu của con trỏ.
Xem thêm: Color Là Gì - What Color Is This
3. Ví dụ sử dụng hàm ảo
#include #include using namespace std;class Animalprivate:string type;public: // constructor to initialize type Animal()type = "Animal"; // declare virtual function virtual string getType() return type; ;class Dog : public Animalprivate:string type;public: // constructor to lớn initialize type Dog()type = "Dog"; string getType() return type; ;class cát : public Animalprivate:string type;public: // constructor to initialize type Cat()type = "Cat"; string getType() return type; ;void print(Animal* ani) { coutgetType()Kết quảAnimal: AnimalAnimal: DogAnimal: CatLớp Animal là lớp các đại lý của lớp Dog cùng Cat. Tạo những con trỏ animal1, dog1, cat1 tất cả kiểu là Animal trỏ để các đối tượng người dùng của lớp Animal, Dog, Cat. Một hàm ảo getType() được khai báo vào lớp các đại lý Animal. Những lớp dẫn xuất Dog và Cat khái niệm lại hàm này.Khi hàm print(animal1) được gọi, bé trỏ trỏ đến một đối tượng người dùng của lớp Animal. Hàm ảo getType() của lớp Animal đang thực thi.Khi hàm print(dog1) được gọi, nhỏ trỏ trỏ đến một đối tượng người tiêu dùng của lớp Dog. Hàm ảo getType() được tư tưởng là trong lớp Dog được gọi.Khi hàm print(cat1) được gọi, con trỏ trỏ mang lại một đối tượng của lớp Cat. Hàm ảo getType() được quan niệm là vào lớp Cat được gọi.Bài trước và bài bác sau trong môn học>" data-wpel-link="internal">Hàm thuần ảo (pure virtual function) với lớp trừu tượng (abstract class) vào C++ >>