Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Clase & Estructura ¿diferencias?

Iniciado por J_F_NASH, 10 de Septiembre de 2005, 07:12:37 PM

« anterior - próximo »

TheAzazel

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

sés

 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.
Soy indeciso... ¿o no?

Warchief

 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

zupervaca

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

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.
hat the hells!

zupervaca

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/

ethernet

 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.

Ray

 
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.






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.