ในบทความนี้ เราจะพูดถึงแนวคิดการสืบทอดในการเขียนโปรแกรม C++ เราจะอธิบายแนวคิดของฟังก์ชันเพื่อนใน C++ พร้อมตัวอย่างการทำงาน
ทำไมต้องเป็นมรดก?
การสืบทอดอนุญาตให้สร้างคลาสใหม่หรือคลาสที่ได้รับจากคลาสอื่นหรือคลาสฐาน คลาสที่ได้รับหรือคลาสย่อยจะมีคุณสมบัติทั้งหมดของคลาสพาเรนต์หรือคลาสฐาน เราสามารถนำรหัสกลับมาใช้ใหม่ได้ด้วยความช่วยเหลือของการสืบทอด
ประเภทของมรดก
มรดกมีหลายประเภท:
- มรดกที่เรียบง่าย/เดียว
- มรดกลำดับชั้น
- มรดกหลายระดับ
- มรดกหลายอย่าง
ในบทความนี้ เราจะพิจารณาเฉพาะการสืบทอดอย่างง่าย/เดียว
ตัวอย่างที่ 1:
ตอนนี้ ให้เราดูตัวอย่างโปรแกรมเพื่อทำความเข้าใจแนวคิดของการสืบทอดใน C++ เราได้กำหนดคลาสฐานแล้วรับคลาสอื่นจากคลาสนั้น ดังนั้นคลาสที่ได้รับจะมีคุณสมบัติ (สมาชิกและฟังก์ชัน) จากคลาสพื้นฐาน
#รวมใช้เนมสเปซ std;
คลาส Base_Class
{
สาธารณะ:
intผม;
โมฆะแสดง()
{
ค่าใช้จ่าย<< 'การแสดงชั้นฐาน' <<ผม<<endl;
}
};
คลาส Derived_Class:ฐานสาธารณะ_Class
{
สาธารณะ:
โมฆะแสดง()
{
ค่าใช้จ่าย<< 'การแสดงของคลาสที่ได้รับ' <<endl;
}
};
intหลัก()
{
Derived_Class dc;
กระแสตรง.ผม = 100;
กระแสตรง.แสดง();
กระแสตรง.แสดง();
กลับ 0;
}
ตัวอย่างที่ 2:
นี่เป็นอีกตัวอย่างหนึ่งของมรดกใน C++ ในตัวอย่างนี้ เราจะมาดูกันว่าคอนสตรัคเตอร์ถูกเรียกอย่างไรเมื่อสร้างคลาสอ็อบเจ็กต์
ดังที่คุณเห็นด้านล่าง เราได้กำหนดคอนสตรัคเตอร์คลาสพื้นฐานสองตัวและคอนสตรัคเตอร์คลาสที่ได้รับสามตัว คุณสามารถสังเกตได้อย่างชัดเจนจากผลลัพธ์ด้านล่างว่าคอนสตรัคเตอร์คลาสพื้นฐานถูกเรียกก่อน คอนสตรัคคลาสที่ได้รับจะถูกเรียก
#รวมใช้เนมสเปซ std;
คลาส Base_Class
{
สาธารณะ:
Base_Class()
{
ค่าใช้จ่าย<< 'Base_Class - ไม่มีพารามิเตอร์' <<endl;
}
Base_Class(intNS)
{
ค่าใช้จ่าย<< 'Base_Class - พารามิเตอร์ : ' <<NS<<endl;
}
};
คลาส Derived_Class:ฐานสาธารณะ_Class
{
สาธารณะ:
Derived_Class()
{
ค่าใช้จ่าย<< 'Derived_Class - ไม่มีพารามิเตอร์' <<endl;
}
Derived_Class(intและ)
{
ค่าใช้จ่าย<< 'Derived_Class - พารามิเตอร์ : ' <<และ<<endl;
}
Derived_Class(intNS,intและ):Base_Class(NS)
{
ค่าใช้จ่าย<< 'พารามิเตอร์ของ Derived_Class : ' <<และ<<endl;
}
};
intหลัก()
{
Derived_Class d(7,19);
}
ตัวอย่างที่ 3:
ในตัวอย่างนี้ เราจะมาดูกันว่าวัตถุคลาสที่ได้รับนั้นสามารถใช้ได้อย่างไร
ดังที่คุณเห็น มีสองคลาสที่กำหนดไว้: Rectangle_Class และ Cube_Class Rectangle_Class เป็นคลาสพื้นฐานที่คลาสที่ได้รับ เช่น Cube_Class ได้มา ดังนั้น เรากำลังสืบทอดคุณลักษณะจาก Rectangle_Class ถึง Cube_Class
นอกจากนี้ คุณสามารถสังเกตได้ว่าเรากำลังสืบทอด Cube_Class ด้วยการควบคุมการเข้าถึงแบบสาธารณะ ซึ่งหมายความว่าคลาสที่ได้รับสามารถเข้าถึงสมาชิกที่ไม่ใช่ส่วนตัวทั้งหมดของคลาสฐาน
เราได้ประกาศอ็อบเจ็กต์ของคลาสที่ได้รับ จากนั้นเรียกใช้เมธอดจากคลาสพื้นฐาน เช่น setLength() และ setBreadth()
#รวมใช้เนมสเปซ std;
คลาส Rectangle_Class
{
ส่วนตัว:
intระยะเวลา;
intความกว้าง;
สาธารณะ:
Rectangle_Class();
Rectangle_Class(intNS,intNS);
Rectangle_Class(Rectangle_Class&NS);
intรับความยาว()
{
กลับระยะเวลา;
}
intรับความกว้าง()
{
กลับความกว้าง;
}
โมฆะsetLength(intNS);
โมฆะsetBreadth(intNS);
intพื้นที่();
};
คลาส Cube_Class:สี่เหลี่ยมผืนผ้าสาธารณะ_Class
{
ส่วนตัว:
intความสูง;
สาธารณะ:
Cube_Class(intชม)
{
ความสูง=ชม;
}
intรับความสูง()
{
กลับความสูง;
}
โมฆะsetHeight(intชม)
{
ความสูง=ชม;
}
intปริมาณ()
{
กลับรับความยาว()*รับความกว้าง()*ความสูง;
}
};
Rectangle_Class::Rectangle_Class()
{
ระยะเวลา=1;
ความกว้าง=1;
}
Rectangle_Class::Rectangle_Class(intNS,intNS)
{
ระยะเวลา=NS;
ความกว้าง=NS;
}
Rectangle_Class::Rectangle_Class(Rectangle_Class&NS)
{
ระยะเวลา=NS.ระยะเวลา;
ความกว้าง=NS.ความกว้าง;
}
โมฆะRectangle_Class::setLength(intNS)
{
ระยะเวลา=NS;
}
โมฆะRectangle_Class::setBreadth(intNS)
{
ความกว้าง=NS;
}
intRectangle_Class::พื้นที่()
{
กลับระยะเวลา*ความกว้าง;
}
intหลัก()
{
Cube_Class c(8);
ค.setLength(12);
ค.setBreadth(9);
ค่าใช้จ่าย<<'ระดับเสียงคือ'<<ค.ปริมาณ()<<endl;
}
บทสรุป:
ในบทความนี้ ฉันได้อธิบายแนวคิดเรื่องมรดกใน ค ++ . C++ รองรับการสืบทอดประเภทต่างๆ รวมถึงการสืบทอดหลายรายการ (เช่น การสืบทอดคุณสมบัติจากหลายคลาสพื้นฐานหรือคลาสพาเรนต์) อย่างไรก็ตาม เพื่อให้ง่ายขึ้น ฉันได้พิจารณาเพียงมรดกเดียวที่นี่ ฉันได้แสดงตัวอย่างการทำงานสามตัวอย่างเพื่ออธิบายว่าเราจะใช้การสืบทอดในการเขียนโปรแกรม C++ และนำรหัสกลับมาใช้ใหม่ได้อย่างไร ยิ่งไปกว่านั้น นี่เป็นคุณสมบัติที่มีประโยชน์มากของ C++