การแทนที่ฟังก์ชัน C++

C Function Overriding



ในบทความนี้ เราจะพูดถึงการแทนที่ฟังก์ชันในภาษาการเขียนโปรแกรม C++ C ++ รองรับความหลากหลายรันไทม์

ในการแทนที่ฟังก์ชัน คลาสย่อยจะกำหนดฟังก์ชันที่กำหนดไว้แล้วในคลาสหลัก







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



ตอนนี้ เราจะดูตัวอย่างบางส่วนและทำความเข้าใจแนวคิดการแทนที่ฟังก์ชันใน C++



ตัวอย่าง-1

ฉันได้กำหนดสองคลาสในโค้ดตัวอย่างด้านล่าง – คลาสพื้นฐานและคลาสที่ได้รับ คลาสฐานมีฟังก์ชันสมาชิกเช่น disp() Derived_Class สืบทอดมาจาก Base_Class ฟังก์ชัน disp() มีอยู่ใน Base_Class แล้วกำหนดใหม่ใน Derived_Class





ในฟังก์ชัน main() วัตถุของ Derived_Class เช่น d จะถูกสร้างขึ้น จากนั้น เราเรียกใช้ฟังก์ชัน disp() บนออบเจ็กต์คลาสที่ได้รับ ดังนั้นฟังก์ชันในคลาสที่ได้รับจะถูกเรียกใช้ เวอร์ชันคลาสพื้นฐานถูกละเว้นที่นี่ คุณสามารถดูฟังก์ชันด้านล่างของเอาต์พุตเป็น – disp() ในคลาสที่ได้รับ

#รวม

ใช้เนมสเปซ std;

//คลาสพื้นฐาน
คลาส Base_Class
{
สาธารณะ:
โมฆะประโยชน์()
{
ค่าใช้จ่าย<< 'disp() ฟังก์ชั่นในคลาสฐาน' <<endl;
}

};

//ชั้นที่ได้รับ
คลาส Derived_Class:ฐานสาธารณะ_Class
{
สาธารณะ:
โมฆะประโยชน์()
{
ค่าใช้จ่าย<< 'disp() ฟังก์ชั่นในคลาสที่ได้รับ' <<endl;
}
};

intหลัก()
{
Derived_Class d;
NS.ประโยชน์(); //disp() ฟังก์ชั่นบนวัตถุคลาสที่ได้รับ
กลับ 0;
}



ตัวอย่าง-2

ในตัวอย่างนี้ เราจะเห็นวิธีการจงใจเรียกใช้รุ่นคลาสพื้นฐานของฟังก์ชันผ่านอ็อบเจ็กต์คลาสที่ได้รับ ในคำจำกัดความของฟังก์ชันคลาสที่ได้รับ เราใช้ตัวดำเนินการแก้ไขขอบเขต [::] เพื่อเรียกฟังก์ชันเวอร์ชันพื้นฐานของคลาส

#รวม

ใช้เนมสเปซ std;

คลาส Base_Class
{
สาธารณะ:
โมฆะประโยชน์()
{
ค่าใช้จ่าย<< 'disp() ฟังก์ชั่นในคลาสฐาน' <<endl;
}

};

คลาส Derived_Class:ฐานสาธารณะ_Class
{
สาธารณะ:
โมฆะประโยชน์()
{
Base_Class::ประโยชน์(); //เรียก disp() เวอร์ชันคลาสฐาน
}
};

intหลัก()
{
Derived_Class d;
NS.ประโยชน์();
กลับ 0;
}

ตัวอย่าง-3

นี่เป็นอีกตัวอย่างหนึ่งของการแทนที่ฟังก์ชัน ในตัวอย่างนี้ เราได้สร้างคลาสหลัก - Animal และสองคลาสที่ได้รับ - Duck and Dog คลาสพื้นฐาน เช่น คลาส Animal มีฟังก์ชันสมาชิก sound()

ในคลาสย่อย/คลาสย่อยที่ได้รับมา เช่น Dog เราได้กำหนดฟังก์ชันเดียวกันใหม่ นั่นคือ sound() เพื่อแทนที่คำจำกัดความคลาสพื้นฐาน ในทำนองเดียวกัน ในคลาสที่ได้รับอื่นๆ เช่น Duck เราได้กำหนดฟังก์ชันเดียวกันใหม่ นั่นคือ sound()

ในฟังก์ชัน main() เราได้สร้างวัตถุ dog ของ Dog และ duck of Duck ดังนั้น เมื่อเราเรียกใช้ฟังก์ชัน sound() สำหรับ dog and duck เวอร์ชันคลาสที่ได้รับของฟังก์ชัน sound() จะเรียก คุณสามารถดูผลลัพธ์ของโปรแกรมดังที่แสดงด้านล่าง ดังนั้น ด้วยความช่วยเหลือของการแทนที่ฟังก์ชัน เราสามารถเรียกใช้ฟังก์ชันเฉพาะคลาสที่ได้รับมา

#รวม

ใช้เนมสเปซ std;

สัตว์คลาส
{
สาธารณะ:
โมฆะเสียง()
{
ค่าใช้จ่าย<< 'เสียงสัตว์!' <<endl;
}

};

//คลาสที่ได้รับ – คลาสสุนัข
คลาส Dog:สัตว์สาธารณะ
{
สาธารณะ:
โมฆะเสียง()
{
ค่าใช้จ่าย<< 'เสียงหมาเห่า.' <<endl;
}
};

//คลาสที่ได้รับ – ชั้นเป็ด
คลาสเป็ด:สัตว์สาธารณะ
{
สาธารณะ:
โมฆะเสียง()
{
ค่าใช้จ่าย<< 'เสียงเป็ด - ต้มตุ๋น' <<endl;
}
};


intหลัก()
{
หมาหมา;
เป็ดเป็ด;

หมา.เสียง(); //เสียง() ของ dog
เป็ด.เสียง(); //เสียง() ของเป็ด

กลับ 0;
}

บทสรุป

ในบทความนี้ ฉันได้อธิบายฟังก์ชันแทนที่ใน ค ++ . ภาษา C ++ รองรับความหลากหลายรันไทม์ การแทนที่ฟังก์ชันช่วยให้บรรลุความแตกต่างของรันไทม์ใน C ++ บทความนี้กล่าวถึงแนวคิดของการแทนที่ฟังก์ชันและวิธีบรรลุความแตกต่างของรันไทม์โดยใช้การแทนที่ฟังก์ชัน