Strukturvererbung in C ++

170

Kann ein structin C ++ geerbt werden?

Peter Mortensen
quelle

Antworten:

290

Ja, structist genau so, classaußer dass die Standardzugänglichkeit publicfür struct(während es privatefür ist class) ist.

Alex Martelli
quelle
129

Ja. Die Vererbung ist standardmäßig öffentlich.

Syntax (Beispiel):

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

Anders als Alex und Evan bereits gesagt haben, möchte ich hinzufügen, dass eine C ++ - Struktur nicht wie eine C-Struktur ist.

In C ++ kann eine Struktur genau wie eine C ++ - Klasse Methoden, Vererbung usw. haben.

Chad Gorshing
quelle
4
Eine C ++ - Struktur kann wie eine C-Struktur sein. Wenn dies der Fall ist, wird es als POD - Plain Old Datatype bezeichnet. Dies ist eine wichtige Unterscheidung, da beispielsweise nur POD-Strukturen Teil von Gewerkschaften sein können.
Camh
9
Aber PODs können Methoden haben, sind also keine "ähnlichen" C-Strukturen in dem Sinne, von dem cgorshing spricht.
Steve Jessop
Wenn es sich um einen POD handelt, gibt es keine Methoden. Ansonsten ist der Name bedeutungslos.
RL-S
24

Natürlich. In C ++ sind Strukturen und Klassen nahezu identisch (Dinge wie die Standardeinstellung "öffentlich" statt "privat" gehören zu den kleinen Unterschieden).

Evan Teran
quelle
23

In C ++ entspricht die Vererbung einer Struktur einer Klasse, mit Ausnahme der folgenden Unterschiede:

Beim Ableiten einer Struktur von einer Klasse / Struktur ist der Standardzugriffsspezifizierer für eine Basisklasse / Struktur öffentlich. Beim Ableiten einer Klasse ist der Standardzugriffsspezifizierer privat.

Beispielsweise schlägt Programm 1 mit einem Kompilierungsfehler fehl und Programm 2 funktioniert einwandfrei.

// 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
quelle