2009-06-11 4 views

risposta

221

Sì, è esattamente come structclass tranne l'accessibilità di default è public per struct (mentre è private per class).

+3

Questa dovrebbe essere la risposta accettata. – QuantumKarl

19

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

99

Sì. L'ereditarietà è pubblica per impostazione predefinita.

Sintassi (esempio):

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

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

+1

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

+6

Ma i POD possono avere metodi, quindi non sono "come" le strutture C nel senso di cui cgorshing sta parlando. –

3

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; 
}