Polymorphism and Inheritance

Polymorphism

Polymorphism หมายถึง การมีหลายรูปแบบ หรือก็คือ ใน 1 กระบวนการหรือการกระทำสามารถแสดงผลลัพธ์หรือแสดงผลการกระทำได้มากกว่าหนึ่งรูปแบบ แบ่งออกเป็น 2 ประเภท

1. Function Overloading

การใช้ชื่อฟังก์ชันเหมือนกัน แต่มีความสามารถหรือคุณลักษณะที่แตกต่างกัน หมายความว่า ฟังก์ชันสามารถเปลี่ยนจำนวการรับพารามิเตอร์หรือเปลี่ยนประเภทตัวแปรของพารามิเตอร์

// oop_p3_1.cpp
#include <iostream>
using namespace std;

class function_overlasding 
{ 
    public: 
      
    // function with 1 int parameter 
    int func(int x) { 
        return x + 5; 
    } 
      
    // function with same name but 1 double parameter 
    void func(double x) { 
        cout << "value of x is " << x << endl; 
    } 
      
    // function with same name and 2 int parameters 
    void func(int x, double y) { 
        cout << "value of x and y is " << x << ", " << y << endl; 
    } 
}; 
  
int main() { 
      
    function_overlasding obj1; 
      
    // Which function is called will depend on the parameters passed 
    // The first 'func' is called  
    int a = obj1.func(7);
    cout << a  << endl; 
      
    // The second 'func' is called 
    obj1.func(9.132); 
      
    // The third 'func' is called 
    obj1.func(85,9.132); 
    return 0; 
}  

จากตัวอย่างจะเห็นได้ว่าฟังก์ชันที่ชื่อ func ทำหน้าที่แตกต่างกันใน 3 สถานการณ์ (การรับพารามิเตอร์) ที่แตกต่างกัน ซึ่งเป็นคุณสมบัติของ Polymorphism

2. Operator Overloading

operator ที่ทำงานได้หลายแบบ ในหลักการเชิงวัตถุจะช่วยให้สามารถเรียกใช้เครื่องหมายเช่น +, -, *, / แทนการเรียกใช้เมดธอดหรือฟังก์ชันของ object

Inheritance

Inheritance คือ การสืบทอดความสามารถของ class ในการรับคุณสมบัติและลักษณะจาก class อื่น

ศัพย์ที่ควรรู้ ::

Sub Class คือ คลาสที่สืบทอดคุณสมบัติจากคลาสอื่น เรียกว่า คลาสที่ได้รับ (Derived Class)

Super Class คือ คลาสที่มีคุณสมบัติสืบทอดหรือที่รู้จักกันว่าเป็นคลาสตั้งต้น (Base Class)

จากภาพ หมายความว่า Animal class ถือว่าเป็น Base Class ส่วน dog class, Cat class และ Cow class จะเป็นเพียง Derived Class ของ Animal class ซึ่งการสืบทอดความสามารถจะมีหลายแบบ แต่ในหัวข้อนี้จะกล่าวถึงเพียงแค่ 3 แบบ คือ การสืบทอดทางเดียว (Single Inheritance) การสืบทอดหลายรายการ (Multiple Inheritance) และการสืบทอดหลายนะดับ (Multilevel Inheritance)

1. Single Inheritance

การสืบทอดทางเดียว หมายความว่า 1 Derived Class สามารถรับการสืบทอดได้ 1 Base Class เท่านั้น

2. Multiple Inheritance

การสืบทอดหลายหลายการ หมายความว่าใน 1 Derived Class สามารถสืบทอดได้มากว่า 1 Base Class

3. Multilevel Inheritance

การสืบทอดหลายนะดับ หมายความว่า Derived Class สามารถรับการสืบทอด Base Class ที่สืบทอดกันมาก่อนได้

จากภาพจะเห็นได้ว่า Class C จะเป็น Base Class หลักของการสืบทอด ส่วน Class B จะเป็นทั้ง Derived Class ของ Class C และเป็น Base Class ของ Class A อีกทีหนึ่ง ทำให้ Class A ที่เป็น Derived Class สุดท้ายสามารถสืบทอดได้ทั้งคุณสมบัติของ Class B และ Class C

Access Specifiers for Inheritance

อย่างที่ทราบกันว่า Access Specifiers จะมีทั้งหมด 3 แบบ คือ public, private และสุดท้ายคือ protected ที่จะกล่าวถึงในหัวข้อนี้ ซึ่ง protected จะเป็นการอนุญาติการเข้าถึงข้อมูลเฉพาะ class ที่เป็น Derived class เท่านั้น

ถึงแม้ว่าใน Inheritance จะเป็นการสืบทอดความสามารถของ class แต่ไม่สามารถสืบทอดความสามารถที่ถูกจำกัดการเข้าถึงแบบ private ที่อยู่ใน Base class หมายความว่า ไม่สามารถสร้างเมดธอดหรือฟังก์ชันที่จะเข้าถึงข้อมูลที่เป็น private ของ Base class เนื่องจากเมดธอดหรือฟังก์ชันที่สร้างอยู่นอก class ที่มีข้อมูลที่ถูกกำหนดเป็น private

แหล่งอ้างอิง ::

จากตัวอย่างจะเห็นได้ว่าสามารถใช้ชื่อฟังก์ชันหรือเมดธอดซ้ำกันได้ตามหลักการของ Polymorphism แต่จะการที่จะแสดงผลลัพธ์ที่แตกต่างกันต้องให้ object ประกาศเรียกใช้ class เพื่อเข้าถึงฟังก์ชันหรือเมดธอดที่มีผลลัพธ์ตามที่ต้องการ

Last updated

Was this helpful?