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

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


การเรียกใช้ฟังก์ชันเสมือนจาก Constructor หรือ Destructor นั้นอันตราย และควรหลีกเลี่ยงเมื่อทำได้ นี่เป็นเพราะว่าฟังก์ชันเสมือนที่คุณเรียกใช้นั้นถูกเรียกจากคลาสฐานไม่ใช่คลาสที่ได้รับ

ใน C++ ทุกคลาสจะสร้างเวอร์ชันของตารางเมธอดเสมือนก่อนที่จะเข้าสู่โครงสร้างของตัวเอง ดังนั้นการเรียกเมธอดเสมือนในตัวสร้างจะเรียกเมธอดเสมือนของคลาสฐาน หรือถ้าไม่มีการนำไปใช้ในระดับนั้น มันจะสร้างการเรียกเมธอดเสมือนล้วนๆ เมื่อ Base ถูกสร้างขึ้นอย่างสมบูรณ์แล้ว คอมไพเลอร์จะเริ่มสร้าง Derived class และแทนที่ตัวชี้เมธอดเพื่อชี้การนำคลาส Derived ไปใช้งาน ตัวอย่างเช่น หากคุณมีรหัส −

ตัวอย่าง

#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;
}

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

Base