การแทนที่ฟังก์ชันใน C ++ [ฟังก์ชันโอเวอร์โหลดกับการแทนที่ด้วยตัวอย่าง]

เผยแพร่แล้ว: 2021-05-25

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

สารบัญ

ฟังก์ชัน C++

ฟังก์ชัน C++ คือกลุ่มของคำสั่งที่มารวมกันเพื่อทำงาน ทุกโปรแกรมมีอย่างน้อยฟังก์ชั่น main() และบางโปรแกรมสามารถมีฟังก์ชั่นเพิ่มเติมได้

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

การกำหนดฟังก์ชัน

ไวยากรณ์ทั่วไปของฟังก์ชัน C++ คือ:

return_type function_name (รายการพารามิเตอร์) {

ฟังก์ชั่นร่างกาย

}

ฟังก์ชัน C++ ใดๆ ประกอบด้วยส่วนหัวของฟังก์ชันและเนื้อหา ส่วนประกอบของฟังก์ชัน C++ คือ:

ประเภทการส่ง คืน – ประเภท การส่งคืนแสดงถึงประเภทของค่าตอบแทนของฟังก์ชัน

ชื่อฟังก์ชัน- หมายถึงชื่อของฟังก์ชัน ชื่อฟังก์ชันพร้อมกับรายการพารามิเตอร์ประกอบขึ้นเป็นลายเซ็นของฟังก์ชัน

พารามิเตอร์ – พารามิเตอร์คือตัวยึดสำหรับค่าที่ส่งคืนโดยฟังก์ชัน เมื่อเรียกใช้ฟังก์ชัน ค่าจะถูกส่งไปยังพารามิเตอร์ที่เรียกว่าพารามิเตอร์จริง

ตัว ฟังก์ชัน- ตัวฟังก์ชันประกอบด้วยรายการคำสั่งที่กำหนดว่าฟังก์ชันจะทำอะไร

การเรียกใช้ฟังก์ชัน

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

คุณต้องส่งพารามิเตอร์ที่จำเป็นรวมถึงชื่อฟังก์ชันเพื่อเรียกใช้ฟังก์ชัน หากฟังก์ชันส่งคืนค่า ก็สามารถเก็บค่าได้ มีสองสามวิธีที่อาร์กิวเมนต์สามารถส่งผ่านไปยังฟังก์ชันในขณะที่เรียกใช้ ประเภทการโทร ได้แก่ Call by Value, Call by Reference และ Call by Pointer

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

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

ตัวอย่าง:

แหล่งที่มา

ศึกษาตัวอย่างที่ให้ไว้ข้างต้น ที่นี่คลาสพาเรนต์คือ "Base" และคลาสย่อยคือ "Derived"

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น:

ฟังก์ชันที่ได้รับ

ฟังก์ชั่น print() ถูกประกาศทั้งในคลาส Base และ Derived เมื่อเราเรียกใช้ฟังก์ชัน print() ผ่านออบเจ็กต์คลาส Derived "derived1" คลาส print() จากคลาส Derived จะถูกเรียกใช้และดำเนินการโดยแทนที่ฟังก์ชันเดียวกันของคลาส Base

การทำงานของหลักการแทนที่ฟังก์ชัน

แหล่งที่มา

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

หากเราเรียกใช้ฟังก์ชัน print() ผ่านอ็อบเจ็กต์ของคลาส Base ฟังก์ชันจะไม่ถูกแทนที่ สำหรับเช่น:

//ฟังก์ชันการเรียกของคลาสฐาน

ฐานฐาน1;

base1.print(); // เอาต์พุต: ฟังก์ชันพื้นฐาน

ผลลัพธ์ของรหัสข้างต้นจะเป็น:

ฟังก์ชันพื้นฐาน

วิธีเข้าถึงฟังก์ชั่นที่ถูกแทนที่ใน C ++

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

ตัวอย่าง:

แหล่งที่มา

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น:

ฟังก์ชันที่ได้รับ

ฟังก์ชันพื้นฐาน

การทำงานของการเข้าถึงฟังก์ชันที่ถูกแทนที่

แหล่งที่มา

ที่นี่คำสั่งที่ได้มา 1.print() เข้าถึงฟังก์ชัน print() ของคลาส Derived และคำสั่งที่ได้รับ2.Base::print() เข้าถึงฟังก์ชัน print() ของคลาสฐาน

การเรียกใช้ฟังก์ชันแทนที่ C++ จากคลาสที่ได้รับ

ในโค้ดนี้ เราเรียกฟังก์ชัน overridden จากภายในคลาส Derived เอง

การทำงานของการเรียกใช้ฟังก์ชันที่ถูกแทนที่จากคลาสที่ได้รับ

แหล่งที่มา

คำสั่ง Base::print() เรียกใช้ฟังก์ชันที่ถูกแทนที่จากภายในคลาส Derived

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

ฟังก์ชันโอเวอร์โหลด vs. ฟังก์ชันโอเวอร์ไรด์

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

การแทนที่ฟังก์ชันทำได้เมื่อรันไทม์ ในการแทนที่ คลาสพื้นฐานถูกกำหนดใหม่ในคลาสที่ได้รับด้วยชนิดส่งคืนและพารามิเตอร์เดียวกัน ความแตกต่างอื่น ๆ ระหว่างการแทนที่ฟังก์ชันและการโอเวอร์โหลดฟังก์ชันใน C ++ คือ:

1. มรดก

การแทนที่ฟังก์ชันสามารถใช้ได้กับการสืบทอดคลาสเท่านั้น ในขณะที่การโอเวอร์โหลดฟังก์ชันไม่ต้องการการสืบทอดคลาส

2. ลายเซ็นฟังก์ชัน

ฟังก์ชันโอเวอร์โหลดต่างกันในลายเซ็น ไม่ว่าจะเป็นจำนวนพารามิเตอร์หรือประเภทของพารามิเตอร์ ในการแทนที่ฟังก์ชัน ลายเซ็นของฟังก์ชันจะยังคงเหมือนเดิม

3. ขอบเขตฟังก์ชัน

ฟังก์ชันที่ถูกแทนที่จะแตกต่างกันไปในขอบเขต ในขณะที่ฟังก์ชันที่โอเวอร์โหลดจะมีขอบเขตเดียวกัน

4. พฤติกรรมการทำงาน

การแทนที่ฟังก์ชันมีความสำคัญเมื่อฟังก์ชันคลาสที่ได้รับต้องดำเนินการแตกต่างกันหรือมีฟังก์ชันเพิ่มเติมนอกเหนือจากฟังก์ชันคลาสพื้นฐาน ฟังก์ชันโอเวอร์โหลดจะดำเนินการเมื่อฟังก์ชันที่มีชื่อเดียวกันจำเป็นต้องมีพฤติกรรมที่แตกต่างกันขึ้นอยู่กับพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันเหล่านั้น

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง โครงการมากกว่า 9 โครงการ และการมอบหมายงาน สถานะศิษย์เก่า IIIT-B โครงการหลักและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

การแทนที่ฟังก์ชันคืออะไร?

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

อะไรคือความแตกต่างระหว่างการแทนที่ฟังก์ชันและการโอเวอร์โหลด?

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

การสืบทอดใน C ++ คืออะไร?