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