การสืบทอดและพอลีมอร์ฟิสม์ใน C++
— c++ — 1 min read
การสืบทอดและโพลีมอร์ฟิสม์ (Inheritance and Polymorphism) เป็นส่วนสำคัญในการเขียนโปรแกรมเชิงวัตถุในภาษา C++ โดยสืบทอดเป็นกระบวนการที่คลาสย่อย (Derived Class) สามารถสืบทอดคุณสมบัติและพฤติกรรมจากคลาสหลัก (Base Class) ได้ และโพลีมอร์ฟิสม์เป็นการสร้างเมท็อดที่มีชื่อเดียวกันในคลาสที่สืบทอด แต่มีพฤติกรรมที่แตกต่างกัน
ตัวอย่างการใช้งานการสืบทอดและโพลีมอร์ฟิสม์ในภาษา C++:
#include <iostream>
// คลาสหลัก (Base Class)class Shape {public: // เมท็อดเรียกว่าเมท็อดเป้าหมาย (Virtual Method) virtual void draw() { std::cout << "วาดรูปร่าง" << std::endl; }};
// คลาสย่อย (Derived Class) สืบทอดจากคลาส Shapeclass Circle : public Shape {public: void draw() { std::cout << "วาดวงกลม" << std::endl; }};
// คลาสย่อย (Derived Class) สืบทอดจากคลาส Shapeclass Rectangle : public Shape {public: void draw() { std::cout << "วาดสี่เหลี่ยมผืนผ้า" << std::endl; }};
int main() { // สร้างวัตถุ (Object) จากคลาส Circle และ Rectangle Circle circle; Rectangle rectangle;
// เรียกใช้เมท็อด draw() ของแต่ละวัตถุ circle.draw(); // วาดวงกลม rectangle.draw(); // วาดสี่เหลี่ยมผืนผ้า
// ใช้งานโพลีมอร์ฟิสม์ โดยใช้ตัวแปรของคลาสหลัก Shape* shape1 = &circle; Shape* shape2 = &rectangle;
shape1->draw(); // วาดวงกลม shape2->draw(); // วาดสี่เหลี่ยมผืนผ้า
return 0;}`
ในตัวอย่างข้างต้น เราสร้างคลาสหลักที่ชื่อ Shape
ซึ่งมีเมท็อด draw()
เป็นเมท็อดเป้าหมาย (Virtual Method) สามารถถูกโพลีมอร์ฟิสม์ได้ และสร้างคลาสย่อย Circle
และ Rectangle
ซึ่งสืบทอดคุณสมบัติและพฤติกรรมจากคลาส Shape
โดยแต่ละคลาสย่อยมีเมท็อด draw()
ที่มีพฤติกรรมที่แตกต่างกัน
ใน main()
เราสร้างวัตถุจากคลาส Circle
และ Rectangle
แล้วเรียกใช้เมท็อด draw()
ของแต่ละวัตถุ ซึ่งจะแสดงผลลัพธ์เป็นข้อความที่บอกว่าเรากำลังวาดรูปร่างใด ต่อมา เราใช้โพลีมอร์ฟิสม์โดยกำหนดตัวแปรประเภท Shape*
ให้ชี้ไปยังวัตถุของคลาส Circle
และ Rectangle
และเรียกใช้เมท็อด draw()
ผ่านตัวแปรดังกล่าว ซึ่งจะได้ผลลัพธ์เช่นเดียวกัน
การใช้งานการสืบทอดและโพลีมอร์ฟิสม์ช่วยให้เราสามารถเขียนโปรแกรมที่ยืดหยุ่นและสามารถใช้งานร่วมกับวัตถุของคลาสต่างๆ ได้อย่างมีประสิทธิภาพและสะดวกมากยิ่งขึ้น
เมื่อมีการสืบทอดและโพลีมอร์ฟิสม์ เราสามารถใช้คลาสหลักเพื่อกำหนดโครงสร้างและพฤติกรรมของวัตถุหลายๆ ตัวได้อย่างยืดหยุ่นและมีประสิทธิภาพ เช่นในตัวอย่างข้างต้น เมื่อเราสร้างวัตถุจากคลาส Shape
เราสามารถกำหนดให้ตัวแปรชนิด Shape*
ชี้ไปยังวัตถุของคลาส Circle
หรือ Rectangle
แล้วเรียกใช้เมท็อด draw()
ของแต่ละวัตถุได้ โดยระบบ จะเรียกใช้เมท็อดที่เหมาะสมตามชนิดของวัตถุที่ชี้ไป
การใช้งานโพลีมอร์ฟิสม์ช่วยให้เราสามารถเขียนโค้ดที่ใช้งานร่วมกับอ็อบเจกต์ที่มีลักษณะและพฤติกรรมที่แตกต่างกันได้อย่างยืดหยุ่น ยกตัวอย่างเช่น หากเรามีคลาส Shape
เป็นคลาสหลัก และมีคลาส Circle
และ Rectangle
เป็นคลาสย่อย โดยทั้งสองคลาสย่อยมีเมท็อด draw()
ที่ทำงานต่างกัน เราสามารถใช้ลักษณะของโพลีมอร์ฟิสม์เพื่อเรียกใช้เมท็อด draw()
ของแต่ละวัตถุโดยไม่ต้องสนใจว่าวัตถุเป็นชนิดใด ทำให้โค้ดมีความยืดหยุ่นและสามารถใช้งานร่วมกับอ็อบเจกต์ต่างๆ ได้อย่างสะดวกและรวดเร็วมากยิ่งขึ้น
การใช้งานการสืบทอดและโพลีมอร์ฟิสม์ในภาษา C++ เป็นเครื่องมือที่สำคัญที่ช่วยให้โค้ดเชิงวัตถุมีความยืดหยุ่น รวดเร็ว และสามารถนำไปใช้งานใ นสถานการณ์ต่างๆ ได้อย่างมีประสิทธิภาพ