// oop_p3_1.cpp#include<iostream>usingnamespace std;classfunction_overlasding{ public: // function with 1 int parameter intfunc(int x) { return x +5; } // function with same name but 1 double parameter voidfunc(double x) { cout <<"value of x is "<< x << endl; } // function with same name and 2 int parameters voidfunc(int x,double y) { cout <<"value of x and y is "<< x <<", "<< y << endl; } }; intmain() { 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); return0; }
// oop_p3_2.cpp#include<iostream>usingnamespace std;classComplex { private:int real, imag; public: // first section codeComplex(int r =0,int i =0) { real = r; imag = i; } // second section code // This is automatically called when '+' is used with // between two Complex objects Complexoperator + (Complexconst&obj) { Complex res; res.real = real +obj.real; res.imag = imag +obj.imag; return res; } voidprint() { cout << real <<" + i"<< imag << endl; } }; intmain() { Complex c1(10,5),c2(2,4); Complex c3 = c1 + c2; // An example call to "operator+" c3.print(); }
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เท่านั้น
การสืบทอดหลายหลายการ หมายความว่าใน 1 Derived Class สามารถสืบทอดได้มากว่า 1 Base Class
// oop_p3_4.cpp#include<iostream>usingnamespace std; // first base class classVehicle { public:Vehicle() { cout <<"This is a Vehicle"<< endl; } }; // second base class classFourWheeler { public:FourWheeler() { cout <<"This is a 4 wheeler Vehicle"<< endl; } }; // sub class derived from two base classes classCar:publicVehicle,publicFourWheeler { }; // main function intmain() { // creating object of sub class will // invoke the constructor of base classes Car obj; return0; }
This is a Vehicle
This is a 4 wheeler Vehicle
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
// oop_p3_5.cpp#include<iostream>usingnamespace std; // base class classVehicle{ public:Vehicle() { cout <<"This is a Vehicle"<< endl; } }; classfourWheeler:publicVehicle{ public:fourWheeler() { cout<<"Objects with 4 wheels are vehicles"<<endl; } }; // sub class derived from two base classes classCar:publicfourWheeler{ public:Car() { cout<<"Car has 4 Wheels"<<endl; } }; // main function intmain() { //creating object of sub class will //invoke the constructor of base classes Car obj; return0; }
This is a Vehicle
Objects with 4 wheels are vehicles
Car has 4 Wheels
อย่างที่ทราบกันว่า Access Specifiers จะมีทั้งหมด 3 แบบ คือ public, private และสุดท้ายคือ protected ที่จะกล่าวถึงในหัวข้อนี้ ซึ่ง protected จะเป็นการอนุญาติการเข้าถึงข้อมูลเฉพาะ class ที่เป็น Derived class เท่านั้น
ถึงแม้ว่าใน Inheritance จะเป็นการสืบทอดความสามารถของ class แต่ไม่สามารถสืบทอดความสามารถที่ถูกจำกัดการเข้าถึงแบบ private ที่อยู่ใน Base class หมายความว่า ไม่สามารถสร้างเมดธอดหรือฟังก์ชันที่จะเข้าถึงข้อมูลที่เป็น private ของ Base classเนื่องจากเมดธอดหรือฟังก์ชันที่สร้างอยู่นอก class ที่มีข้อมูลที่ถูกกำหนดเป็น private
Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University