ความแตกต่างที่สำคัญ – การเอาชนะและการโอเวอร์โหลดใน C
ความแตกต่างที่สำคัญระหว่างการแทนที่และการโอเวอร์โหลดใน C คือการเชื่อมโยงของการเรียกใช้เมธอดที่ถูกแทนที่ไปยังคำจำกัดความนั้นเกิดขึ้นที่รันไทม์ในขณะที่การโยงเมธอดโอเวอร์โหลดไปยังคำจำกัดความจะเกิดขึ้นในเวลาคอมไพล์
C เป็นภาษาโปรแกรมทั่วไปที่พัฒนาโดย Microsoft ข้อได้เปรียบหลักของ C คือรองรับ Object Oriented Programming (OOP) เสาหลักของ OOP คือ Polymorphism ทำให้วัตถุมีพฤติกรรมหลายอย่าง Polymorphism มีสองประเภทที่เรียกว่าการเอาชนะและการโอเวอร์โหลด บทความนี้กล่าวถึงความแตกต่างระหว่างการแทนที่วิธีการและการโอเวอร์โหลดใน C
การเอาชนะใน C คืออะไร
มีอีกหนึ่งแนวคิดที่สำคัญใน OOP คือการสืบทอด คือการใช้คุณลักษณะและวิธีการของคลาสที่มีอยู่แล้ว ปรับปรุงการใช้รหัสซ้ำได้ คลาสที่มีอยู่แล้วคือคลาสพื้นฐาน และคลาสใหม่เรียกว่าคลาสที่ได้รับ ในการเอาชนะ polymorphism ควรมีคลาสฐานและคลาสที่ได้รับ การโยงของการเรียกใช้เมธอดที่ถูกแทนที่ไปยังคำจำกัดความจะเกิดขึ้นที่รันไทม์ ตัวอย่างมีดังนี้
รูปที่ 01: โปรแกรม C ที่มีการเอาชนะ
ตามโปรแกรมด้านบน คลาส Shape เป็นคลาสพื้นฐาน และประกอบด้วยวิธีการแสดง Class Rectangle และ Triangle เป็นคลาสที่ได้รับ คลาสที่ได้รับเหล่านี้ยังมีการแสดงเมธอดเดียวกันกับการใช้งานของตัวเอง
ขั้นแรก obj ตัวแปรอ้างอิงจะถูกสร้างขึ้น มันชี้ไปที่วัตถุรูปร่าง ดังนั้นวิธีการแสดงของคลาส Shape จะดำเนินการ จากนั้น ตัวแปรอ้างอิงจะชี้ไปที่อ็อบเจ็กต์ Rectangle ดังนั้นวิธีการแสดงของคลาส Rectangle จะดำเนินการ สุดท้าย ตัวแปรอ้างอิงจะชี้ไปที่วัตถุสามเหลี่ยม ดังนั้นวิธีการแสดงของคลาส Triangle จะดำเนินการ วิธีการแสดงคลาสพื้นฐานถูกแทนที่โดยวิธีการแสดงของคลาสที่ได้รับ
วิธีการรันจะถูกกำหนดเมื่อรันไทม์ คลาส Shape เขียนด้วยคีย์เวิร์ด 'เสมือน' คลาส Rectangle และ Triangle เขียนด้วยคีย์เวิร์ด 'override' หากไม่ได้ใช้คีย์เวิร์ดเหล่านี้ ผลลัพธ์จะพิมพ์เนื้อหาของวิธีการแสดงของคลาส Shape สำหรับทุกคน
โอเวอร์โหลดใน C คืออะไร
ในการโอเวอร์โหลด หลายวิธีมีชื่อเดียวกันแต่มีพารามิเตอร์ต่างกัน พารามิเตอร์สามารถเป็นประเภทต่างๆ เมธอดสามารถมีจำนวนพารามิเตอร์ต่างกันได้เมธอดโอเวอร์โหลดเกิดขึ้นในคลาสเดียวกัน การรวมเมธอดที่โอเวอร์โหลดเข้ากับคำจำกัดความจะเกิดขึ้นในเวลาคอมไพล์ อ้างถึงโปรแกรม C ด้านล่าง
รูปที่ 02: โปรแกรม C ที่มีการโอเวอร์โหลด
ตามโปรแกรมข้างต้น class A มีสองวิธีที่มีชื่อเดียวกันเรียกว่า sum มีพารามิเตอร์ประเภทต่างๆ ในโปรแกรมหลัก วัตถุของ A จะถูกสร้างขึ้น ผลรวม (2, 3) จะเรียกใช้วิธีผลรวมด้วยจำนวนเต็ม ผลรวม (5.1, 7.94) จะเรียกใช้วิธีผลรวมที่มีค่าสองเท่า ทั้งสองวิธีมีชื่อและพารามิเตอร์เท่ากัน แต่ประเภทพารามิเตอร์ต่างกัน วิธีการที่ต้องการจะเรียกตามนั้น การโอเวอร์โหลดอาจเกิดขึ้นได้หากชื่อเมธอดและประเภทพารามิเตอร์เหมือนกัน แต่จำนวนพารามิเตอร์ต่างกัน
ความคล้ายคลึงกันระหว่างการเอาชนะและการโอเวอร์โหลดใน C คืออะไร
ทั้ง Overriding และ Overloading ใน C เป็นประเภทของ polymorphism
ความแตกต่างระหว่างการเอาชนะและการโอเวอร์โหลดใน C คืออะไร
การเอาชนะ vs การโอเวอร์โหลดใน C |
|
การแทนที่ใน C คือการจัดเตรียมการใช้งานเฉพาะในวิธีการคลาสที่ได้รับสำหรับวิธีการที่มีอยู่แล้วในคลาสพื้นฐาน | การโอเวอร์โหลดในภาษา C คือการสร้างเมธอดที่มีชื่อเดียวกันแต่มีการใช้งานต่างกัน |
พารามิเตอร์ | |
ในการเอาชนะ C เมธอดมีชื่อเหมือนกัน ประเภทพารามิเตอร์เหมือนกัน และจำนวนพารามิเตอร์เท่ากัน | ในการโอเวอร์โหลด C เมธอดมีชื่อเหมือนกันแต่จำนวนพารามิเตอร์ต่างกันหรือพารามิเตอร์ประเภทอื่น |
เกิดขึ้น | |
ใน C การแทนที่จะเกิดขึ้นภายในคลาสฐานและคลาสที่ได้รับ | ใน C การโอเวอร์โหลดเกิดขึ้นภายในคลาสเดียวกัน |
เวลาผูกมัด | |
การเชื่อมโยงของการเรียกใช้เมธอดที่ถูกแทนที่ไปยังคำจำกัดความจะเกิดขึ้นที่รันไทม์ | การโยงของการเรียกเมธอดที่โอเวอร์โหลดไปยังคำจำกัดความเกิดขึ้น ณ เวลาคอมไพล์ |
คำพ้องความหมาย | |
การแทนที่เรียกว่าความแตกต่างระหว่างรันไทม์ ความหลากหลายไดนามิก หรือการผูกปลาย | การโอเวอร์โหลดเรียกว่า compile time polymorphism, static polymorphism หรือ early binding |
สรุป – การเอาชนะและการโอเวอร์โหลดใน C
การทับซ้อนและการโอเวอร์โหลดเป็นความแตกต่างสองประเภท ความแตกต่างระหว่างการแทนที่และการโอเวอร์โหลดใน C คือการเชื่อมโยงของการเรียกใช้เมธอดที่ถูกแทนที่ไปยังคำจำกัดความนั้นเกิดขึ้นที่รันไทม์ในขณะที่การโยงเมธอดโอเวอร์โหลดไปยังคำจำกัดความจะเกิดขึ้นในเวลารวบรวม