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

Hàm ảo nội tuyến trong C ++

Các hàm ảo trong C ++ sử dụng để tạo danh sách các con trỏ lớp cơ sở và gọi các phương thức của bất kỳ lớp dẫn xuất nào mà không cần biết loại đối tượng lớp dẫn xuất. Các chức năng ảo được giải quyết muộn, trong thời gian chạy.

Công dụng chính của hàm ảo là đạt được Đa hình thời gian chạy. Các hàm nội tuyến được sử dụng để tăng hiệu quả của mã. Mã của hàm nội tuyến được thay thế tại điểm của một lệnh gọi hàm nội tuyến tại thời điểm biên dịch, bất cứ khi nào hàm nội tuyến được gọi.

Bất cứ khi nào một hàm ảo được gọi bằng cách sử dụng tham chiếu hoặc con trỏ của lớp cơ sở thì nó không thể được nội dòng, nhưng bất cứ khi nào được gọi bằng cách sử dụng đối tượng không có tham chiếu hoặc con trỏ của lớp đó, đều có thể được nội tuyến vì trình biên dịch biết chính xác lớp của đối tượng tại thời điểm biên dịch.

Mã mẫu

#include<iostream>
using namespace std;
class B {
   public:
      virtual void s() {
         cout<<" In Base \n";
      }
};

class D: public B {
   public:
      void s() {
         cout<<"In Derived \n";
      }
};

int main(void) {
   B b;
   D d; // An object of class D
   B *bptr = &d;// A pointer of type B* pointing to d
   b.s();//Can be inlined as s() is called through object of class
   bptr->s();// prints"D::s() called"
   //cannot be inlined, as virtualfunction is called through pointer.
   return 0;
}

Đầu ra

In Base
In Derived