Struct inheritance dalam C ++


Jawaban:


290

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


129

Iya. Warisan bersifat publik secara default.

Sintaks (contoh):

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

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 ++.


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).


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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.