การสืบทอด C ++ - ฐานที่เข้าถึงไม่ได้?


157

ฉันดูเหมือนจะไม่สามารถใช้คลาสฐานเป็นพารามิเตอร์ฟังก์ชั่นได้ฉันได้รับมรดกของฉันหรือไม่

ฉันมีดังต่อไปนี้ในหลักของฉัน:

int some_ftn(Foo *f) { /* some code */ };
Bar b;
some_ftn(&b);

และ Class Bar สืบทอดมาจาก Foo ด้วยวิธีนี้:

class Bar : Foo
{
public:
    Bar();
    //snip

private:
    //snip
};

สิ่งนี้ควรใช้ไม่ได้หรือไม่ ฉันดูเหมือนจะไม่สามารถโทรออกได้ในฟังก์ชั่นหลักของฉัน

คำตอบ:


287

คุณต้องทำสิ่งนี้:

class Bar : public Foo
{
    // ...
}

ประเภทมรดกเริ่มต้นของclassใน C ++ เป็นprivateดังนั้นใด ๆpublicและprotectedสมาชิกจากระดับฐานจะถูก จำกัด privateให้ structการสืบทอดในทางกลับกันเป็นpublicค่าเริ่มต้น


28

โดยค่าเริ่มต้นการสืบทอดเป็นส่วนตัว คุณต้องใช้อย่างชัดเจนpublic:

class Bar : public Foo


14
เพื่อขยาย: ในมรดกคือclass privateในการstructสืบทอดเป็นpublicค่าเริ่มต้น
Travis Gockel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.