Wenas :)... Andaba viendo unos codes y vi algo, que me llamo la atencion... Puesto que no le veo el ¿por que?... Aca les dejo parte del code, que me imagino con eso basta:
BasePoint **objs = new BasePoint*[5];
// allocate space for 10 BasePoint pointers,
// they may be used to store derived classes
// creating objects
objs[0] = new Circle(7, 6, 55);
objs[1] = new Rectangle(12, 54, 21, 14);
objs[2] = new Square(19, 32, 10);
objs[3] = new Oval(43, 10, 4, 3);
objs[4] = new Square(3, 41, 3);
bool flag=false;
do {
cout << endl << "We have 5 objects with numbers 0..4" << endl;
cout << "Enter object number to view information about it " << endl;
cout << "Enter any other number to quit " << endl;
char onum; // in fact, this is a character, not a number
// this allows user to enter letter and quit... (1)
cin >> onum;
// flag -- user have entered number 0..4
flag = ((onum >= '0')&&(onum <= '4'));
if (flag)
objs[onum-'0']->info();//(2)
} while(flag);
// freeing memory
for(int i=0;i<5;i++)
delete objs[i];
delete [] objs;
cin.get();
return 0;
}
Ok... En (1) lo que no capto es, para que un char, segun mi ingles :xD "permite ingresar un entero y salir" 0o? y que? igual flag no se va a hacer true si declaras onum como int... porq por ejemplo 'A' o 97 (o su valor en ascii) no es menor que 4 :-\
Y en (2) pes para que el " -'0' "?
Saludos, esas 2 dudas na mas y pes de antemano gracias...
'0' - '0' = 0
'1' - '0' = 1
...
onum lee un carácter luego si metes un carácter del 0 al 4 llamará al info de ese objeto en el array, si es mayor que '4' o menor que '1' o sea no está en el rango, acaba el bucle y el programa
Recuerda 'A' - 'A' = 0 siempre, y una carcterística y común en los sistemas de codificación de caracteres es que las letras vayan consecutivas, y las cifras, luego si '0' = x numero ascii, '1' = x + 1, y N(caracter cifra) = x + N(numero), por tanto N(numero) = N(caracter cifra) - x = N(caracter cifra) - '0', sólo hay que restarle el primero.
Pero '0' en ascii es 0... Asi que para que le quiero restar 0 a un caracter?... No es mejor algo asi:
int onum;
cin >> onum;
// flag -- user have entered number 0..4
flag = ((onum >= 0)&&(onum <= 4));
if (flag)
objs[onum]->info();
} while(flag);
Lo que me extraña es que dice que con char "permite" salir si se ingresa una letra... y con int tambien deberia :¬¬ porq el valor por ejemplo, de 'A', 97 creop, sigue siendo mayor que 4 asi que flag no se hace true, y por eso se saldria del bucle...
Pero no es asi yo lo probe y si ingresas una letra se sale... pero si ingresas el numero 4, por ejemplo te muestra square.. y luego al presionar una letra se vuelve loco el programa xD como un bucle infinito... debe ser algo con respecto al buffer...
Saludos gracias por responder...
Me equivoque bien feo ;D elñ valor de '0' ne ascii no es 0 es 48, asi que ya entendi el porq... estan haciendo como un cast... Superada esa parte :xD
Pero igual no veo el porq de que la forma en que yo lo hago no funciona... O weno funciona si ingresas una letra en la primera vuelta, y se sale del bucle como deberia ser. Pero si en la primera vuelta introduces un entero, se cumple la condicion del bucle, y en la segunda llegas a introducir una letra se vuelve loco...
Saludos...
El problema es que lees un entero y tu le metes una letra, supongo que entonces no "come" caracteres del buffer, y este no mengua, y siempre tiene que leer, que es lo mismo lo perpetúa.
Mmmm yo crei que se hacia un cast con algo asi...
int x;
cin>>x;//Si ingresas una letra, segun yo xD se hace un cast (int)... Pero pes al parecer no es asi
cout<<x<<endl;
Weno muchas gracias por el dato...
Saludos...