Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จะเกิดอะไรขึ้นเมื่อมีการเรียกฟังก์ชันเสมือนภายในฟังก์ชันที่ไม่ใช่เสมือนใน C++


ในส่วนนี้ เราจะพูดถึงข้อเท็จจริงที่น่าสนใจเกี่ยวกับคลาสเสมือนใน C++ เราจะเห็นสองกรณีก่อน แล้วเราจะวิเคราะห์ข้อเท็จจริงกัน

  • ขั้นแรกให้รันโปรแกรมโดยไม่ต้องใช้ฟังก์ชันเสมือนใดๆ

  • รันโปรแกรมโดยใช้ฟังก์ชันเสมือนใดๆ ภายใต้ฟังก์ชันที่ไม่ใช่เสมือน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <iostream>
using namespace std;
class BaseClass {
public:
   void display(){
      cout << "Print function from the base class" << endl;
   }
   void call_disp(){
      cout << "Calling display() from derived" << endl;
      this -> display();
   }
};
class DerivedClass: public BaseClass {
public:
   void display() {
      cout << "Print function from the derived class" << endl;
   }
   void call_disp() {
      cout << "Calling display() from derived" << endl ;
      this -> display();
   }
};
int main() {
   BaseClass *bp = new DerivedClass;
   bp->call_disp();
}

ผลลัพธ์

Calling display() from base class
Print function from the base class

จากผลลัพธ์ เราจะเข้าใจพฤติกรรมของ polymorphic ได้ แม้ว่าจะเรียกใช้ฟังก์ชันเสมือนภายในฟังก์ชันที่ไม่ใช่เสมือนก็ตาม ฟังก์ชันใดที่จะถูกเรียกใช้จะถูกตัดสินที่รันไทม์โดยใช้ vptr และ vtable

  • vtable − นี่คือตารางพอยน์เตอร์ฟังก์ชัน รักษาไว้ต่อคลาส

  • vptr − นี่คือตัวชี้ไปยัง vtable รักษาต่ออินสแตนซ์ของอ็อบเจ็กต์