Skip to content
Siamcoder

การสืบทอดและพอลีมอร์ฟิสม์ใน 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) สืบทอดจากคลาส Shape
class Circle : public Shape {
public:
void draw() {
std::cout << "วาดวงกลม" << std::endl;
}
};
// คลาสย่อย (Derived Class) สืบทอดจากคลาส Shape
class 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++ เป็นเครื่องมือที่สำคัญที่ช่วยให้โค้ดเชิงวัตถุมีความยืดหยุ่น รวดเร็ว และสามารถนำไปใช้งานในสถานการณ์ต่างๆ ได้อย่างมีประสิทธิภาพ