Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Types en C++

Iniciado por Mr. Sandman, 20 de Septiembre de 2007, 05:41:46 PM

« anterior - próximo »

Mr. Sandman

Gracias por las aclaraciones, aunque sólo estaba curioseando un poco, tengo que profundizar en ésas diferencias entre classes y estructuras a las que haces referencia, sin duda parece interesante, y más aún teniendo en cuenta que hace bastantes años que programo, y nunca he necesitado de ellas, supongo que me abrirán nuevas puertas o atajos para implementar cosas que hacía de otras formas  :idea:

Una reflexión, en general me está gustando C++, aunque encuentro algunos temas que no veo muy claros, por ejemplo para obtener los mismos resultados necesito mucho más código, éso me hace dudar un poco de si debo estudiarlo más a fondo para cambiarme a C++ o simplemente para saber más, (que nunca sobra conocer un otro lenguaje)ya que de momento puedo hacer todo lo que quiero (y puedo) en Blitz3D, y éste me permite un ritmo de trabajo muy rápido en comparación.

Aunque supongo que éso podría mejorar con la práctica, en fin voy a segir con el ladrillo éste que dice ser manual  :twisted:

yens

Dejándome cosas en el tintero, una Estructura es así por encima "lo mismo " que una clase pero no puede heredar (ni propiedades ni metodos/funciones) de otras estructuras, lo cual choca con el concepto de herencia de una clase.

Ademas como comenta bnl, las estructuras son un tipo por valor y las clases por referencia.

Esto es así en .net, nosé en C++ como será exactamente, pero no puedes afirmar que un type es una clase, porque creo recordar que los types no tenian herencia en Blitz ;)

1cacalvo

En c++ las estructuras y las clases se pueden pasar por valor y por referencia independientemente con la estructura que se trabaje...

struct A
{
  int x;
}

class B
{
 int y;
}

void funcA ()
{
  A a_;
  B b_;

  Referencia (a_,b_);
  Valor(a_,b_);
}

void Referencia (A& a, B& b)
{
 return;
}

void Valor (A a, B b)
{
 return;
}

sefivy

Cita de: "1cacalvo"En c++ las estructuras y las clases se pueden pasar por valor y por referencia independientemente con la estructura que se trabaje...

struct A
{
  int x;
}

class B
{
 int y;
}

void funcA ()
{
  A a_;
  B b_;

  Referencia (a_,b_);
  Valor(a_,b_);
}

void Referencia (A& a, B& b)
{
 return;
}

void Valor (A a, B b)
{
 return;
}
toda la razon, se me olvido comentarlo

shephiroth

Lo siento pero no estoy nada de acuerdo con lo ultimo expuesto. Ahi estas utilizando indirecciones raras, nada que ver con q sea clase o estructura.

Si hablais de "por valor" o "por referencia" y utilizais indirecciones o punteros estais invalidando el comentario. Un ejemplo, que quizas se ve mas claro:

struct A {int a;}
class B {int b;}
void modifica(A a) {a.a=0;}
void modifica(B b) {b.b=0;}
A a; a.a=5;
B b; b.b=5;
modifica(a);
modifica(b);


En este ejemplo, a.a terminara con valor 5, porque b se pasa por valor, y aunque se modifica en la funcion el valor original no queda modificado. Sin embargo, b.b sera 0, pq al contrario se pasa por referencia y por tanto el valor que se modifica es el original.

bnl

por lo que comenta shephiroth las clases y estructuras en C++ se comportan como .NET

Cuando se pasa una clase se pasa la referencia a un objeto, por lo tanto aunque se pase por valor los cambios que se hagan en el objeto se modifican fuera de la funcion. Eso si, si instancias un nuevo objeto y lo asignas desde fuera seguiras teniendo el mismo objetos.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

davur

La única diferencia entre class y struct en C++ es el nivel de protección por defecto de sus miembros y clases base (privado para class, público para struct).

Teniendo en cuenta eso, puedes utilizar una u otra indistintamente (la única excepción es que struct no puede utilizarse para identificar un parámetro de tipo en un template).

Aunque esto ya son connotaciones de estilo, en código genérico es muy habitual ver struct en lugar de class para ahorrarse el 'public:'; y muchos utilizan struct cuando la clase tiene pocos métodos y tiene datos públicos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.