Newsgroup: it.comp.lang.c++
Titolo: Variabile integer & char

 risponderà ;-)
prego.  una variabile di tipo char e' di per se di tipo intero.
MLO@mlinux 28 $ cat foo.cxx
#include <iostream>
int main() { int i;
  i=42;  std::cout << i << std::endl;
  i='a'; std::cout << i << std::endl;
}
MLO@mlinux 29 $ g++ -ansi -pedantic -W -Wall -o foo foo.cxx && ./foo
42
97
MLO@mlinux 30 $
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg


Ma non sempre ciò che uno dice corrisponde a ciò che credeva di dire.
Magari mi sbaglio, ma sospetto che con "valore char" l'OP intendesse riferirsi a
qualcosa come "array di char" o "stringa".
Se non è così, la risposta di Maurizio è sufficiente.
Diversamente, se con "far accettare a una variabile un ..." l'OP intendeva
"applicare l'operatore assegnamento a una variabile passando come argomento
un...", la risposta è "sì", ma la variabile in questione non può essere di un
tipo built-in.
Max

Praticamente ottieni qualcosa di molto simile al VARIANT della MS (una union
di tutti i tipi possibili e immaginabili di dato più un "selezionatore" che
dice qual'è il tipo che in quel momento sta venendo usato più un fracco e
mezzo di funzioni per convertire fra tutti i tipi possibili. Se tutte le
conversioni sono possibili, allora dato X il numero di tipi che puoi mettere
nel tuo "VARIANT" ti serviranno x^2-x funzioni di conversione, più di sicuro
qualche funzione di inizializzazione, copia, pulizia etc. etc. etc. La
dimensione di questo "ambaradan" sarà qualcosa del tipo sizeof(char) +
sizeof(tipopiùgrandechecivuoimettere) dove il char serve come selezionatore
(ti basteranno 256 tipi, vero?). Il tutto verrà magari paddato un pochettino
dal compilatore di un paio di bytes)
(chiaramente se  vuoi puoi farlo anche con una classe che al suo interno si
tiene un puntatore e basta e poi allochi la memoria dall'heap. Volendo il
selezionatore o lo tieni nella classe o lo sbatti nella memoria puntata)
--- bye

 
Chiedo scusa se mi sono espresso male, ma quello che a me serve è che una
variabile di tipo intero possa sia lavorare con gli interi che con il char,
questo vuol dire che se una variabile assume valore 39, venga visualizzato
39 in output e quando in seguito questa stessa variabile assumerà un
carattere per esempio a, verrà visualizzato in output il carattere a, non
il numero 97. :-)
-- 
Imperatore
Icq #84624356

 il numero 97. :-)
Allora il tuo problema è facilmente risolvibile... Ti basta una stringa :-)
Pensa... Se tu metti nella string una 'a', quando la stamperai ti verrà
stampata una stringa. Ma se tu ci metti dentro "97", allora ti verrà
stampato 97... E se tu ci metti "mi sono di nuovo espresso male, riformulo
la domanda", indovina cosa ti stampa?
(lo so... Tu vorresti che il numero fosse ancora un numero :-) )
--- bye

 il numero 97. :-)
Questo pone un interessante problema.  Se la variabile contiene il
valore 97 (e se tu rappresenti i caratteri in ASCII, cosa a priori
non detta), vuoi che venga visualizzato in output il numero 97 o
il carattere 'a'?
La soluzione e' quella di scrivere una tua procedura per la stampa
di un intero su di un ostream (non ho sottomano lo Standard qui dove
sono, ma mi par di ricordare che l'overloading di metodi che
riguardano tipi builtin non sia permesso): PRIMA scrivi la variabile
come numero; poi controlli che abbia un valore valido per un carattere
e, se del caso, lo scrivi come carattere.  Qualcosa tipo:
MLO 4 $ cat foo.cxx
#include <iostream>
#include <cctype>
using namespace std;
void intPrint(int i, ostream & o = cout) {
  o << i;
  if (isprint(static_cast<unsigned char>(i))) {
    o << " = " << static_cast<unsigned char>(i);
  }
  o << endl;
}
int main () {
  int i=4, j=97;
  intPrint(i);
  intPrint(j);
  return 0;
}
MLO 5 $ g++ -ansi -pedantic -W -Wall -o foo foo.cxx && ./foo
4
97 = a
MLO $ 6
