โครงสร้างการสืบทอดใน C ++


คำตอบ:


290

ใช่structเป็นเหมือนclassทุกอย่างยกเว้นความสามารถในการเข้าถึงเริ่มต้นใช้publicสำหรับstruct(ในขณะที่ใช้privateเพื่อclass)


129

ใช่. การสืบทอดเป็นค่าเริ่มต้น

ไวยากรณ์ (ตัวอย่าง):

struct A { };
struct B : A { };
struct C : B { };

46

นอกเหนือจากที่ Alex และ Evan ได้กล่าวไปแล้วฉันต้องการเพิ่มว่า C ++ struct ไม่เหมือนกับ C struct

ใน C ++, struct สามารถมีวิธีการสืบทอด ฯลฯ เช่นเดียวกับคลาส C ++


4
C ++ C ++ สามารถเป็นเช่นเดียวกับ C โครงสร้าง เมื่อมันคือมันเรียกว่า POD - ธรรมดาประเภทข้อมูล มันเป็นความแตกต่างที่สำคัญเนื่องจากตัวอย่างเช่นโครงสร้าง POD เท่านั้นที่สามารถเป็นส่วนหนึ่งของสหภาพ
camh

9
แต่ POD สามารถมีวิธีการได้ดังนั้นจึงไม่เหมือนกับ "โครงสร้าง" C ในแง่ที่ cgorshing กำลังพูดถึง
Steve Jessop

หากเป็น POD ก็จะไม่มีวิธีการ มิฉะนั้นชื่อจะไม่มีความหมาย
RL-S

24

แน่นอน. ใน C ++ โครงสร้างและคลาสเกือบจะเหมือนกัน (สิ่งต่าง ๆ เช่นการกำหนดค่าเริ่มต้นสู่สาธารณะแทนที่จะเป็นแบบส่วนตัวนั้นแตกต่างกันเล็กน้อย)


23

ใน C ++ โครงสร้างของมรดกจะเหมือนกับคลาสยกเว้นความแตกต่างต่อไปนี้:

เมื่อรับโครงสร้างจากคลาส / struct ตัวระบุการเข้าถึงเริ่มต้นสำหรับคลาส / โครงสร้างพื้นฐานจะเป็นแบบสาธารณะ และเมื่อได้รับคลาสตัวระบุการเข้าถึงเริ่มต้นจะเป็นแบบส่วนตัว

ตัวอย่างเช่นโปรแกรม 1 ล้มเหลวด้วยข้อผิดพลาดในการรวบรวมและโปรแกรม 2 ทำงานได้ดี

// Program 1
#include <stdio.h>

class Base {
    public:
        int x;
};

class Derived : Base { }; // Is equivalent to class Derived : private Base {}

int main()
{
    Derived d;
    d.x = 20; // Compiler error because inheritance is private
    getchar();
    return 0;
}

// Program 2
#include <stdio.h>

struct Base {
    public:
        int x;
};

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {}

int main()
{
    Derived d;
    d.x = 20; // Works fine because inheritance is public
    getchar();
    return 0;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.