Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Mr. Sandman en 20 de Septiembre de 2007, 05:41:46 PM

Título: Types en C++
Publicado por: Mr. Sandman en 20 de Septiembre de 2007, 05:41:46 PM
Bueno, estoy ahora trasteando un poco con C++, pues la verdad es que siempre quise aprender, aunque me defiendo bien con otros lenguajes. Pues nada, la cuestión es que últimamente siempre programo en Blitz3D, y veo que hay muchas similitudes entre uno y otro (aunque la sintaxis de C++ me tira patrás aún  :lol: ) y la pregunta es que no veo claro el equivalente de las types (tan usadas y útiles en blitz3D) en C++. Són classes, estructuras? los dichosos punteros? si alguno que conozca los dos tiene la solución y ya de paso me destripa un poquito éstas diferencias pues mejor, gracias de antemano  :wink:
Título: Types en C++
Publicado por: fjfnaranjo en 20 de Septiembre de 2007, 07:31:38 PM
Pues si, te puedo hechar una mano.

En Blizt la estructura Type realmente actua como una "lista enlazada". Busca eso en google y tendras todas las respuestas al alcance :)

Con una lista enlazada puedes encadenar lo que tu quieras: clases, estructuras, etc. Simplemente estudiate lo que es una lista enlazada y aprende mas profundamente OOP y no te sera dificil el salto (yo lo di).


Perdon por no usar acentos, escribo desde Toronto y aqui como que no hay ...
Título: Types en C++
Publicado por: [EX3] en 20 de Septiembre de 2007, 07:51:13 PM
Con posibilidad de equivocarme, los Types de Blitz3D al igual que de Visual Basic 6 y otros Basic tradicionales en C y C++ equivaldrian a un Struct, ya que en Blitz3D, VB 6.0 y Basic tradicional no existen clases, por lo que una estructura o tipo definido "Type" solo podria contener variables y arrays, que segun recuerdo es lo que permite definir Struct.

Si no me equivoco:

struct MiTipo
{
   int ValorA;
   float ValorB;
   char ValorC;
}

MiTipo miVariable;

Corregirme si me equivoco, lo poco que toque C++ lo tengo guardado en lo mas profundo de mi memoria :P

Salu2...

Edito: Me autocorrijo :P, segun veo aqui (http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/csref/html/vcrefStructTypes.asp) que Struct permite en C++ y C# definir clases (solo C++) asi como eventos y mas cosas... nunca se acuesta uno sin aprender algo nuevo je :)
Título: Types en C++
Publicado por: Mr. Sandman en 20 de Septiembre de 2007, 08:02:46 PM
Gracias a los dos, me informaré un poco más sobre eso, ya estoy viendo por dónde van los tiros, aunque me está costando un poco establecer semejanzas. Sobretodo la sintaxis es algo que me tiene frito, es cómo volver a aprender  :lol:
Título: Types en C++
Publicado por: [EX3] en 20 de Septiembre de 2007, 08:05:37 PM
Despues de probar una sintaxis como la de C++ (en mi caso la de C#) te sentiras mas raro cuando intentes volver al Basic de Blitz3D o Visual Basic 6.0, creeme :lol:

Salu2...
Título: Types en C++
Publicado por: Mr. Sandman en 20 de Septiembre de 2007, 08:09:51 PM
No se, de algún modo creo que la sintaxis te puede dificultar bastante las cosas, ya veremos  :wink:
Título: Types en C++
Publicado por: Mr. Sandman en 20 de Septiembre de 2007, 08:33:14 PM
He encontrado ésto:

http://www.fredosaurus.com/notes-cpp/structs/structs.html

Parece ser lo que yo buscaba, o sea que los structs (que también los llama classes )de C++ són cómo las types del Blitz3D no? (Decidme que sí  :lol: )

PD: Ya veo que las classes són lo mismo y que substituyeron a los structs, ya le voy pillando  :P
Título: Types en C++
Publicado por: Pogacha en 20 de Septiembre de 2007, 09:04:54 PM
No se nada de Blitridi, pero las estructuras o clases sirven para crear un tipo de dato el cual sirva para abstraer un problema mediante el paradigma de la programación orientada o objectos.

struct Fuego {
 float calor, intensidad, ... ;
};

struct Comburente {
 float densidad, volumen, ...;
};

struct Combustible {
   float densidad, volumen, ...;
};

Fuego operator+(const Combustible &c, const Comburente & o)
{
 Fuego f;
 f.calor = c.densidad * c.volumen + ...
 f.intensidad = ..
 return f;
}

esto me permitiria pensar en sumar comburente mas combustible para obtener el resultado en fuego ... lo cual es practico para interpretar los problemas y pensar logicamente en su resolución.

Sobre struct y class, la diferencia (creo que la unica) es que una struct tiene un default to public y class tienen un default to private.
o sea:

struct {
 private:
   ...
};  

Es lo mismo que
class {
...
};

y

struct {
   ...
};  

Es lo mismo que

class {
public:
...
};

Saludos
Título: Types en C++
Publicado por: bnl en 20 de Septiembre de 2007, 09:18:45 PM
En .Net la diferencia entre estructuras y clases es que las primeras son un tipo por valor y las segundas por referencia. Se comportan de forma diferente.

¿En C++ sucede igual?
Título: Types en C++
Publicado por: Pogacha en 20 de Septiembre de 2007, 10:40:07 PM
Aca está perfectamente claro:

http://en.wikipedia.org/wiki/C++_structures_and_classes
Título: Types en C++
Publicado por: Mr. Sandman en 20 de Septiembre de 2007, 10:56:16 PM
Gracias gente, ya me quedó claro y me va bien, porque ya veo que las classes són lo mismo que mis queridas types de blitz  :D
Título: Types en C++
Publicado por: sefivy en 20 de Septiembre de 2007, 11:40:58 PM
la diferencia real de una class y una struct en c++ es que mientras una permite solo atributos
ej:


struct fuego {
int calor;
int intensidad;
int chispa;
}

la otra permitiria tambien funciones

class mechero {
int calor;
int intensidad
int chispa
int encender(){
int fuego;
calor+intensidad+chispa=fuego;
return fuego;
}
}
no se si me e esplicao  :lol:
Título: Types en C++
Publicado por: Pogacha en 21 de Septiembre de 2007, 01:01:49 AM
No, eso no es así.

Las structs también permiten funciones miembros.

Saludos
Título: Types en C++
Publicado por: ToTeX en 21 de Septiembre de 2007, 02:37:38 AM
en c++ me parece que la diferencia es sólo una cuestión de visibilidad por defecto. Creo que los miembros de una estructura son por defecto públicos, y los de una clase privados.
Título: Types en C++
Publicado por: fjfnaranjo en 21 de Septiembre de 2007, 06:49:43 AM
CitarParece ser lo que yo buscaba, o sea que los structs (que también los llama classes )de C++ són cómo las types del Blitz3D no? (Decidme que sí  )

No...

... y mira que le estas dando vueltas.

Los Types en Blizt serian en C++ estructuras puras y duras, no clases.

Ahora bien, en Blizt, puedes usar instrucciones especificas para recorrer todas las instancias de un dato Type (por ejemplo, para recorrer todas las particulas del juego y actualizar su estado) y esa capacidad (la de recorrer la lista) se implementa en C++ con una 'lista enlazada'.

En serio, olvidate por ahora de los Types, estudia OOP a fondo. No trates de ver que puedes escribir en C++ para hacer lo mismo que haces en Blizt, porque en C++ el planteamiento es distinto (porque dispone de clases, una herramienta mucho mas potente que las estructuras para gestionar entidades). Ya te dije que cuando estudiases OOP empezarias a vislumbrar por logica como usar las clases en el desarrollo de videojuegos.

Un saludo.
Título: Types en C++
Publicado por: Mr. Sandman en 21 de Septiembre de 2007, 07:33:17 AM
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:
Título: Types en C++
Publicado por: yens en 21 de Septiembre de 2007, 09:26:52 AM
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 ;)
Título: Types en C++
Publicado por: 1cacalvo en 21 de Septiembre de 2007, 10:56:45 AM
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;
}
Título: Types en C++
Publicado por: sefivy en 21 de Septiembre de 2007, 11:31:51 AM
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
Título: Types en C++
Publicado por: shephiroth en 21 de Septiembre de 2007, 03:54:16 PM
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.
Título: Types en C++
Publicado por: bnl en 21 de Septiembre de 2007, 05:16:44 PM
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.
Título: Types en C++
Publicado por: davur en 21 de Septiembre de 2007, 06:09:07 PM
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.