2009-06-11 12 views

Respuesta

221

Sí, struct es exactamente igual class excepto la accesibilidad por defecto es de publicstruct (aunque es private para class).

+3

Esta debería ser la respuesta aceptada. – QuantumKarl

19

Por supuesto. En C++, las estructuras y las clases son casi idénticas (cosas como el incumplimiento de público en lugar de privado se encuentran entre las pequeñas diferencias).

99

Sí. La herencia es pública por defecto.

Sintaxis (ejemplo):

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

Aparte de lo que Alex y Evan ya se han mencionado, me gustaría añadir que una estructura de C++ no es como una estructura C.

En C++, una estructura puede tener métodos, herencia, etc. al igual que una clase de C++.

+1

una estructura C++ puede ser como una estructura C. Cuando lo es, se llama POD - Plain Old Datatype. Es una distinción importante, ya que, por ejemplo, solo las estructuras POD pueden formar parte de los sindicatos. – camh

+6

Pero los POD pueden tener métodos, por lo que no son "similares" a las estructuras C en el sentido del que se está hablando de cgorshing. –

3

En C++, la herencia de una estructura es la misma que una clase, excepto las siguientes diferencias:

Al derivar una estructura de una clase/estructura, el valor por defecto el acceso especificador de una clase base/struct es público. Y al derivar una clase, el especificador de acceso predeterminado es privado.

Por ejemplo, el programa 1 falla con un error de compilación y el programa 2 funciona bien.

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