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.
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
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.
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/
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.
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
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.
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
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.
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
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
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
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
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++.
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.
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....
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.
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.htmlEn 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
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
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.
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/
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.
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.