Struct inheritance dalam C ++

170

Bisakah a structdiwarisi dalam C ++?

Peter Mortensen
sumber

Jawaban:

290

Ya, structpersis seperti classkecuali aksesibilitas default publicuntuk struct(sementara privateuntuk class).

Alex Martelli
sumber
129

Iya. Warisan bersifat publik secara default.

Sintaks (contoh):

struct A { };
struct B : A { };
struct C : B { };
Suvesh Pratapa
sumber
46

Selain apa yang telah dinyatakan oleh Alex dan Evan, saya ingin menambahkan bahwa sebuah C ++ struct tidak seperti sebuah C struct.

Dalam C ++, sebuah struct dapat memiliki metode, pewarisan, dll. Seperti kelas C ++.

Chad Gorshing
sumber
4
sebuah C ++ struct dapat seperti sebuah C struct. Ketika itu, itu disebut POD - Datatype Polos Tua. Ini adalah perbedaan penting, karena misalnya, hanya struct POD yang dapat menjadi bagian dari serikat pekerja.
camh
9
Tapi POD dapat memiliki metode, jadi bukan "seperti" struct C dalam arti yang dibicarakan oleh cgorshing.
Steve Jessop
Jika POD, itu tidak memiliki metode. Kalau tidak, namanya tidak ada artinya.
RL-S
24

Tentu saja. Dalam C ++, struct dan kelas hampir identik (hal-hal seperti default ke publik, bukan privat adalah di antara perbedaan kecil).

Evan Teran
sumber
23

Dalam C ++, pewarisan struktur adalah sama dengan kelas kecuali perbedaan berikut:

Saat memperoleh struct dari kelas / struct, penentu akses default untuk kelas / struct dasar bersifat publik. Dan ketika menurunkan kelas, specifier akses default bersifat pribadi.

Misalnya, program 1 gagal dengan kesalahan kompilasi dan program 2 berfungsi dengan baik.

// 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;
}
Neha Agrawal
sumber