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

แทนที่คำหลักใน C++


การแทนที่ฟังก์ชันเป็นคุณลักษณะทั่วไปของ C++ โดยทั่วไปการแทนที่ฟังก์ชันหมายถึงการนิยามฟังก์ชันที่มีอยู่ในคลาสฐานใหม่ และยังถูกกำหนดในคลาสที่ได้รับอีกด้วย ดังนั้นลายเซ็นของฟังก์ชันจะเหมือนกันแต่ลักษณะการทำงานจะแตกต่างกัน

แต่อาจมีสถานการณ์ที่โปรแกรมเมอร์ทำผิดพลาดขณะแทนที่ฟังก์ชันนั้น เช่นถ้าลายเซ็นไม่เหมือนกัน นั่นจะถือว่าเป็นฟังก์ชันอื่น แต่ไม่ใช่วิธีการแทนที่หรือนั่น ในกรณีนั้น เราสามารถใช้คำสำคัญแทนที่ได้ คำหลักนี้ถูกนำมาใช้ใน C+ +11 เมื่อคอมไพเลอร์พบคีย์เวิร์ดประเภทนี้ ก็สามารถเข้าใจได้ว่านี่เป็นเวอร์ชันที่ถูกแทนที่ของคลาสเดียวกัน

เรามาดูตัวอย่างเพื่อทำความเข้าใจแนวคิดกัน

ตัวอย่าง

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display() {
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

ผลลัพธ์

Displaying from Derived Class

ในกรณีนี้ โปรแกรมทำงานได้ดีเนื่องจากลายเซ็นเหมือนกัน ในตัวอย่างต่อไปนี้ ลายเซ็นจะแตกต่างกัน สำหรับคำสำคัญแทนที่ จะทำให้เกิดข้อผิดพลาด

ตัวอย่าง

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display(int x) override{
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

ผลลัพธ์

[Error] 'void DerivedClass::display(int)' marked override, but does not override

ในกรณีนี้ โปรแกรมทำงานได้ดีเนื่องจากลายเซ็นเหมือนกัน ในตัวอย่างต่อไปนี้ ลายเซ็นจะแตกต่างกัน สำหรับคำสำคัญแทนที่ จะทำให้เกิดข้อผิดพลาด