มรดก C++

C Inheritance



การสืบทอดเป็นคุณลักษณะที่สำคัญมากของการเขียนโปรแกรมเชิงวัตถุ ช่วยให้โปรแกรมเมอร์ได้รับคลาสจากคลาสที่มีอยู่ สิ่งนี้มีประโยชน์มากโดยเฉพาะในโปรเจ็กต์ที่ซับซ้อนขนาดใหญ่ เนื่องจากช่วยให้โปรแกรมเมอร์นำโค้ดกลับมาใช้ใหม่ได้

ในบทความนี้ เราจะพูดถึงแนวคิดการสืบทอดในการเขียนโปรแกรม C++ เราจะอธิบายแนวคิดของฟังก์ชันเพื่อนใน C++ พร้อมตัวอย่างการทำงาน







ทำไมต้องเป็นมรดก?

การสืบทอดอนุญาตให้สร้างคลาสใหม่หรือคลาสที่ได้รับจากคลาสอื่นหรือคลาสฐาน คลาสที่ได้รับหรือคลาสย่อยจะมีคุณสมบัติทั้งหมดของคลาสพาเรนต์หรือคลาสฐาน เราสามารถนำรหัสกลับมาใช้ใหม่ได้ด้วยความช่วยเหลือของการสืบทอด



ประเภทของมรดก

มรดกมีหลายประเภท:



  1. มรดกที่เรียบง่าย/เดียว
  2. มรดกลำดับชั้น
  3. มรดกหลายระดับ
  4. มรดกหลายอย่าง

ในบทความนี้ เราจะพิจารณาเฉพาะการสืบทอดอย่างง่าย/เดียว





ตัวอย่างที่ 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++