Computer >> Máy Tính >  >> Lập trình >> C ++

Làm thế nào để gọi một hàm ảo bên trong các hàm tạo trong C ++?


Việc gọi các hàm ảo từ một hàm tạo hoặc hàm hủy là nguy hiểm và nên tránh bất cứ khi nào có thể. Điều này là do hàm ảo bạn gọi được gọi từ lớp Cơ sở chứ không phải lớp dẫn xuất.

Trong C ++ mọi lớp đều xây dựng phiên bản của bảng phương thức ảo trước khi nhập cấu trúc của chính nó. Vì vậy, một cuộc gọi đến phương thức ảo trong phương thức khởi tạo sẽ gọi phương thức ảo của lớp Cơ sở '. Hoặc nếu nó không có triển khai ở cấp độ đó, nó sẽ tạo ra một cuộc gọi phương thức ảo thuần túy. Sau khi Cơ sở được xây dựng hoàn chỉnh, trình biên dịch bắt đầu xây dựng lớp Derived và ghi đè các con trỏ phương thức để chỉ việc triển khai lớp Derived. Ví dụ:Nếu bạn có mã -

Ví dụ

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

Đầu ra

Điều này sẽ đưa ra kết quả -

Base