È possibile ereditare un struct
in C++?Strutturare l'ereditarietà in C++
risposta
Sì, è esattamente come struct
class
tranne l'accessibilità di default è public
per struct
(mentre è private
per class
).
Naturalmente. In C++, le strutture e le classi sono quasi identiche (le cose come l'inadempienza al pubblico invece che al privato sono tra le piccole differenze).
Sì. L'ereditarietà è pubblica per impostazione predefinita.
Sintassi (esempio):
struct A { };
struct B : A { };
struct C : B { };
Altro che quello che Alex e Evan hanno già detto, vorrei aggiungere che una struct C++ non è come una struct C.
In C++, una struttura può avere metodi, ereditarietà, ecc. Proprio come una classe C++.
una struttura C++ può essere come una struttura C. Quando è, è chiamato POD - Plain Old Datatype. È una distinzione importante, poiché, ad esempio, solo le strutture POD possono far parte dei sindacati. – camh
Ma i POD possono avere metodi, quindi non sono "come" le strutture C nel senso di cui cgorshing sta parlando. –
In C++, eredità di una struttura è la stessa di un ramo, salvo le seguenti differenze:
Quando derivante una struttura da una classe/struct, l'accesso-specificatore predefinito per una classe di base/struct è pubblico. E quando si ottiene una classe, l'identificatore di accesso predefinito è privato.
Ad esempio, il programma 1 non riesce con un errore di compilazione e il programma 2 funziona correttamente.
// 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;
}
Questa dovrebbe essere la risposta accettata. – QuantumKarl