Dziedziczenie struktur w C ++

Odpowiedzi:

290

Tak, structjest dokładnie taki sam, classz wyjątkiem domyślnej dostępności publicdla struct(podczas gdy jest privatedla class).

Alex Martelli
źródło
129

Tak. Dziedziczenie jest domyślnie publiczne.

Składnia (przykład):

struct A { };
struct B : A { };
struct C : B { };
Suvesh Pratapa
źródło
46

Poza tym, co już powiedzieli Alex i Evan, chciałbym dodać, że struktura C ++ nie jest podobna do struktury C.

W C ++ struktura może mieć metody, dziedziczenie itp., Podobnie jak klasa C ++.

Chad Gorshing
źródło
4
struktura C ++ może być podobna do struktury w C. Kiedy jest, nazywa się POD - zwykły stary typ danych. Jest to ważne rozróżnienie, ponieważ na przykład tylko struktury POD mogą być częścią związków.
camh
9
Ale POD mogą mieć metody, więc nie są „jak” struktury C w tym sensie, o którym mowa w kgorsingu.
Steve Jessop
Jeśli jest to POD, nie ma metod. W przeciwnym razie nazwa jest bez znaczenia.
RL-S
24

Oczywiście. W C ++ struktury i klasy są prawie identyczne (między małymi różnicami są takie rzeczy, jak domyślne ustawienie publiczne zamiast prywatnego).

Evan Teran
źródło
23

W C ++ dziedziczenie struktury jest takie samo jak klasa, z wyjątkiem następujących różnic:

Podczas tworzenia struktury z klasy / struktury domyślny specyfikator dostępu dla klasy bazowej / struktury jest public. A podczas tworzenia klasy domyślny specyfikator dostępu jest prywatny.

Na przykład program 1 kończy się niepowodzeniem z powodu błędu kompilacji, a program 2 działa dobrze.

// 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
źródło