Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 10 de Septiembre de 2005, 07:12:37 PM

Título: Clase & Estructura ¿diferencias?
Publicado por: J_F_NASH en 10 de Septiembre de 2005, 07:12:37 PM
 Un par de dudas:

1) ¿Cual es la diferencia mas notable entre "clases" y "estructuras"?. Estoy con VS2003 y en una "estructura" he llegado a hacer:
miembros privados, publicos, herencias y si no recuerdo mal, un constructor.

2) ¿Existe alguna forma de que una variable almacene cadenas y valores?. En ActionScrip se escribía algo como esto:
variable2 = 10;
variable1 = "número: " + variable2;

Salida:
numero: 10;


S2.
Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 10 de Septiembre de 2005, 07:13:47 PM
 en c++ la unica diferencia entre clases y estrucutras es que las clases tienen por defecto los miembros publicos y las clases privados, en c-sharp las estructuras son como los tipos de datos y las clases son objetos

saludos
Título: Clase & Estructura ¿diferencias?
Publicado por: _XUTI_H_ en 10 de Septiembre de 2005, 07:28:03 PM
 Si lo que estás buscando es poder imprimir un numero en una cadena creo q t puedo ayudar (supongo que es eso lo que quieres, sino especificame que utilidad le quieres dar):


char cadena[100];
// Esto está reservando espacio para 100 carácteres, pero puedes reservar los q creas q vas a necesitar

int num; // Y esto es una variable entero, :P

num = 10; // Y todas las operaciones que quieras

sprintf(cadena, "Mi numero es: %d, mas o menos.\n", num);
// Ahora cadena contiene: Mi numero es: 10, mas o menos

printf(cadena);


Esto es C y la función sprintf te permite dar "formato" a tus strings de chars o cadenas de caracteres. Puedes buscar información sobre esta función en cualquier manual de C, pero te diré que %d es sustituido por el siguiente parámetro que le pases a la función (en representación de entero).

En C++ seria más fácil:


int num = 10;

cout << "Mi numero es: " << num << ", mas o menos" << endl;


El resultado con los dos códigos es el mismo. Creo, no lo he compilado ni nada, jeje :P

Salu2, espero que te haya servido de ayuda.
Título: Clase & Estructura ¿diferencias?
Publicado por: ethernet en 10 de Septiembre de 2005, 07:59:10 PM
Cita de: "J_F_NASH"
2) ¿Existe alguna forma de que una variable almacene cadenas y valores?. En ActionScrip se escribía algo como esto:
variable2 = 10;
variable1 = "número: " + variable2;

Salida:
numero: 10;

Quizás boost::any te sirva

http://www.boost.org/doc/html/any/
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 11 de Septiembre de 2005, 06:06:17 PM
 
Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

:blink:

Qué tendrá que ver una struct con una metaclase?  (nooo)


En .NET una struct es una "clase ligera":

- Es Value Type
- Es sealed( no se puede heredar de ella ) ni puede heredar de otra clase( implícitamente de ValueType )
- Puede implementar interfaces

Resumo pegando del SDK:


CitarStructs Overview
Structs have the following properties:

Structs are value types while classes are reference types.


When passing a struct to a method, it is passed by value instead of as a reference.


Unlike classes, structs can be instantiated without using a new operator.


Structs can declare constructors, but they must take parameters.


A struct cannot inherit from another struct or class, and it cannot be the base of a class. All structs inherit directly from System.ValueType, which inherits from System.Object.


A struct can implement interfaces.


It is an error to initialize an instance field in a struct.

Así que en el 99.9% de los casos, no se suelen usar structs en .NET.  
Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 11 de Septiembre de 2005, 07:13:59 PM
 me parece que no has usado ni estructuras ni directx managed en c-sharp, mirate un poco las directx y ya me diras si se usan estructuras o no

saludos

pd: eso que has pusto sobre las estructuras es aplicable a los tipos de datos :P  
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 11 de Septiembre de 2005, 07:59:18 PM
 
Citar
pd: eso que has pusto sobre las estructuras es aplicable a los tipos de datos

Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

Uhm, uno de los 2 no habla el mismo idioma  :P , de qué hablas?  :blink:

Managed DX llo conozco muy poco, pero en "general" se suelen usar muy poco las structs, en el framework más allá de los Point, Size y pares de datos de menos de 32bits, no se suelen usar por motivos obvios.

Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 11 de Septiembre de 2005, 08:39:54 PM
 pues eso, que no ser por que mencionas las metaclases debajo de un texto que he puesto yo si yo no he mencionado nada sobre metaclases

saludos
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 11 de Septiembre de 2005, 09:30:51 PM
 
Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

No, has dicho algo incomprensible comparando estructuras y clases que tenía tufillo a comparar estructuras con metaclases.

Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 11 de Septiembre de 2005, 09:54:28 PM
Cita de: "Grugnorr"
Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

No, has dicho algo incomprensible comparando estructuras y clases que tenía tufillo a comparar estructuras con metaclases.
leete bien esa frase, que yo en ningun momento estoy comparando una estructura con una clase
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 11 de Septiembre de 2005, 10:33:43 PM
 Ok, tengo cosas mejores que hacer que intentar adivinar que pretendías decir con :

Citaren c++ la unica diferencia entre clases y estrucutras es que las clases tienen por defecto los miembros publicos y las clases privados, en c-sharp las estructuras son como los tipos de datos y las clases son objetos

total, yo lo tengo muy claro  :P  
Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 12 de Septiembre de 2005, 12:46:15 AM
 pues muy claro, como no sabia si se referia a c++ o c-sharp que son los dos lenguajes en los que se seguro las diferencias entre estructuras y clases puse los dos

Citaren c++ la unica diferencia entre clases y estrucutras es que las clases tienen por defecto los miembros publicos y las clases privados

Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

lo pongo separado en parrafos, tal vez se entienda mejor

saludos
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 12 de Septiembre de 2005, 07:59:44 AM
 Decididamente éste es un diálogo de besugos...

Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

Esa es la frase que deberías explicar, castellano aún no se me ha olvidado  :D  
Título: Clase & Estructura ¿diferencias?
Publicado por: sés en 12 de Septiembre de 2005, 08:22:39 AM
Cita de: "_XUTI_H_"
char cadena[100];
// Esto está reservando espacio para 100 carácteres, pero puedes reservar los q creas q vas a necesitar

int num; // Y esto es una variable entero, :P

num = 10; // Y todas las operaciones que quieras

sprintf(cadena, "Mi numero es: %d, mas o menos.\n", num);
// Ahora cadena contiene: Mi numero es: 10, mas o menos

printf(cadena);



En C++ seria más fácil:


int num = 10;

cout << "Mi numero es: " << num << ", mas o menos" << endl;
No es la primera vez que veo un listado enrevesado en C y luego un simpificado en C++

Versión C real:
int num = 10;
printf( "Mi numero es: %d, mas o menos\n", num );


No veo que sea más fácil en C++.
Título: Clase & Estructura ¿diferencias?
Publicado por: J_F_NASH en 12 de Septiembre de 2005, 12:34:55 PM
 Me estoy liando bastante.
Lo que quiero hacer es que una variable pueda contener letras y numeros. O solo letras, pero que si yo le paso una variable que contiene un entero (el 10) me lo convierta en caracteres. No se, creo que lo he liado mas.

Y lo de si funcionan igual las clases y estructuras... pues no he entendido nada. No estoy con directX. Solo utilizo C++ y SDL en VS 2003.
Solo estoy empleando estructuras y hasta el momento he podido hacer con ellas todo lo que hacía con las clases (ver 1er mensaje que puse)



S2.
Título: Clase & Estructura ¿diferencias?
Publicado por: TheAzazel en 12 de Septiembre de 2005, 12:49:56 PM
 Si quieres que una variable contenga "letras y numeros" entonces debes usar una variable tipo cadena (o un String en C++), que se llaman alfanumericas.
Obviamente, con una variable de este tipo no podras hacer operaciones matematicas ya que no es un numero, aunque pueda contenerlo.
Si lo que quieres es tener bajo un mismo nombre, una variable alfanumerica y un numero...utiliza una estructura:

struct
{
 char cadena[64];
 int    numero;
} mi_dato;

y con eso si podras hacer un:
strcpy(mi_dato.cadena,"Cadena con un 1500");
mi_dato.numero=1500;

No se si te servira esto de algo..quizas si tambien nos dices que estas intentando hacer...te podremos ayudar mejor....
Título: Clase & Estructura ¿diferencias?
Publicado por: sés en 12 de Septiembre de 2005, 12:49:56 PM
 Eso es imposible. Una variable es de un solo tipo.

Lo único que puedes hacer es una clase (estructura o lo que quieras) que tenga dentro una variable de cada tipo y definir unos "get/set" para cada tipo.

Algo así:

class Var {
private:
  char charValue;
  int intValue;
public:
  void setValue( char value ) { charValue = value; }
  void setValue( int value ) { intValue = value; }

  char getCharValue() { return charValue; }
  int getIntValue() { return intValue; }
};



Bueno, puedes hacerlo mejor sobrecargando el operador '=' y te quedará más bonito ;), pero así creo que se ve mejor la idea.
Título: Clase & Estructura ¿diferencias?
Publicado por: Warchief en 12 de Septiembre de 2005, 01:52:36 PM
 C++ es fuertemente tipado y de tipos estáticos, por lo que no se puede directamente.

Echa un vistazo a estas lineas sobre python:
http://users.servicios.retecal.es/tjavier/...ython/x142.html

En lenguajes de script generalmente esto sí se puede hacer, pero enn c++ no se puede hacer directamente, por lo que tienes que usar trucos como los que te proponen sés, theAz y CIA. La mejor forma es sobreescribiendo el operador =; pero, ¿realmente lo necesitas? Esa es la cuestión.

Citar
Lenguaje de tipos estáticos
    Un lenguaje en el que los tipos deben declararse. Java y C son lenguajes de tipos estáticos, porque cada declaración de variable debe incluir un tipo de dato.
Lenguaje de tipos dinámicos
    Un lenguaje en el que los tipos se descubren en el momento de ejecución; lo contrario de tipos estáticos. VBScript y Python son lenguajes de tipos dinámicos, porque suponen de qué tipo es una variable cuando se le asigna un valor por primera vez.
Lenguaje fuertemente tipado
    Un lenguaje en el que los tipos se mantienen siempre. Java y Python son fuertemente tipados. Si se tiene un entero, no se le puede tratar como una cadena sin convertirlo explícitamente (veremos más sobre como hacerlo en este capítulo).
Lenguaje débilmente tipado
    Un lenguaje en el que los tipos pueden ignorarse; lo contrario de fuertemente tipado. VBScript es débilmente tipado. En VBScript, se puede concatenar la cadena '12' con el entero 3 para obtener la cadena '123', y después tratarla como el entero 123, todo ello sin conversión explícita.
Sacado de: http://es.diveintopython.org/odbchelper_funcdef.html
Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 12 de Septiembre de 2005, 03:51:02 PM
Cita de: "Grugnorr"Decididamente éste es un diálogo de besugos...

Citaren c-sharp las estructuras son como los tipos de datos y las clases son objetos

Esa es la frase que deberías explicar, castellano aún no se me ha olvidado  :D
veamos hablando de c-sharp

estructura: como un tipo de dato
clase: es un objeto

la mayoria de la gente habla de estructuras como una clase ligera como tu has indicado, pero eso es falso ya que una estructura en c-sharp es completamente diferente a una clase,  cuando se igualan una a otra se copia su valor con lo que son tratadas como un tipo de valor y no de referencia

saludos
Título: Clase & Estructura ¿diferencias?
Publicado por: Grugnorr en 12 de Septiembre de 2005, 08:07:27 PM
 OK,  lo iba a resumir en que no tienes ni idea ni de C# ni de POO, pero iba a sonar muy borde  :(

Así que llámalo como quieras, pero una clase != objeto, y la distinción enre tipo valor y tipo referencia no sé qué tiene que ver con una clase.

Lo dicho, el post habla de C++ y punto final.
Título: Clase & Estructura ¿diferencias?
Publicado por: zupervaca en 12 de Septiembre de 2005, 08:44:14 PM
Cita de: "Grugnorr"OK,  lo iba a resumir en que no tienes ni idea ni de C# ni de POO, pero iba a sonar muy borde  :(

Así que llámalo como quieras, pero una clase != objeto, y la distinción enre tipo valor y tipo referencia no sé qué tiene que ver con una clase.

Lo dicho, el post habla de C++ y punto final.
me parece estupenda tu opinion, ahora te aconsejo leer este tutorial http://www.programacion.com/tutorial/csharp y la proxima vez antes de escribir nada te lo piensas mejor

definicion de clase: http://www.programacion.com/tutorial/csharp/6/
definicion de una estructura: http://www.programacion.com/tutorial/csharp/14/
Título: Clase & Estructura ¿diferencias?
Publicado por: ethernet en 12 de Septiembre de 2005, 08:55:44 PM
 Sinceramente, es difícil llevar una conversación (y menos una discusión) cuando una persona dice una cosa y la otra responde otra diferente a la preguntada.
Título: Clase & Estructura ¿diferencias?
Publicado por: Ray en 12 de Septiembre de 2005, 09:24:41 PM
 
Cita de: "J_F_NASH"
2) ¿Existe alguna forma de que una variable almacene cadenas y valores?. En ActionScrip se escribía algo como esto:
variable2 = 10;
variable1 = "número: " + variable2;

Para C++, una cadena de texto es un puntero que apunta a la dirección de memoria de una serie de caracteres, por lo tanto no se le puede añadir letras o números con el simbolo +.

Para poder hacerlo hay que crear un nuevo tipo de dato como clase o estructura, y añadir el codigo necesario para la manipulación de caracteres o números, y si además quieres usar los simbolos +, -, *, /, <, =, etc. para realizar operaciones con ellos, hay que implementarle la "sobrecarga de operadores".

Pero si ya existe por ahí uno mejor, porque me da la sensación de que tiene bastante curro crearlo.