Newsgroup: it.comp.lang.c++
Titolo: chiarimenti per principiante

Ciao a tutti.
Premetto che questa è la prima volta che mi addentro nel c++, e avrei
bisogno di un paio di delucidazioni.
per prima cosa volevo sapere se era possibile che, avendo creato una classe
del genere
class myclass
{
  ..
  int q;
  ..
};
, un oggetto così dichiarato
<code>
  ..
  myclass A;
  ..
</code>
potesse essere valutato come q, in modo da poter essere utilizzato così ad
esempio
<code>
  ...
  printf("%d", A);   // che scriva A.q cioè
  ..
  int p = 4 + A + 2;   // p = 4 + A.q + 2
  ..
</code>
spero di essere stato chiaro :)
cioè vorrei sapere cosa scrivere all'interno della definizione della
classe per far si che un oggetto dichiarato restituisca un valore di un
campo all'interno di quella classe (se possibile)
seconda domanda: è normale che includendo nei miei file
#include <iostream.h>
in compilazioni io ottenga questo warning ?
/usr/include/c++/3.2/backward/backward_warning.h:32:2: warning: #warning
This file includes at least one deprecated or antiquated header. Please
consider using one of the 32 headers found in section 17.4.1.2 of the C++
standard. Examples include substituting the <X> header for the <X.h>
header for C++ includes, or <sstream> instead of the deprecated header
<strstream.h>. To disable this warning use -Wno-deprecated.
terza (ed ultima :P) domanda: esiste la classe string ? spulciando su
google ho trovato che bisogna #includere <string> ma continua a dirmi
file.cpp: 'string' is used as a type, but is not defined as a type.
Grazie a chiunque voglia rispondere.
Ciao

 Ciao
Punto 1:
La logica della programmazione orientata agli oggetti suggerisce che tu
dichiari i tuoi membri come privati e poi dichiari dei metodi di accesso
pubblici:
<code>
class myclass
{
    private:
        int q;
    public:
        int get_q () const { return q; }
    ...
}
<\code>
e poi
myclass A;
printf ("%d", A.get_q ());
o meglio
cout << A.get_q ();
Punto 2:
La libreria iostream non ha l'estensione .h. Devi scrivere
#include <iostream>
e basta!
Punto 3:
esatto
#include <string>
string S = "prova";
dovrebbe funzionare. Non capisco l'errore che ti segnala il compilatore, a
meno che tu non faccia un uso errato del tipo string.

 compilatore, a meno che tu non faccia un uso errato del tipo string.
o che non sappia che esistono i namespace e come si usano.
std::string S = "prova";
--
Gerolamo

 spero di essere stato chiaro :)
A parte che concordo pienamente con quando detto da Salvatore nel messaggio
di risposta in cui suggerisce un metodo pubblico per accedere al campo
intero, a titolo accademico, ti rispondo che esiste un metodo per far vedere
un'istanza della tua classe come intero.
La sintassi non la ricordo esattamente, ma dev'essere qualcosa come:
myclass::operator int() const { return q; }
(Anzi, se qualcuno mi corregge, mi fa un favore...)
A questo punto puoi scrivere
cout << A;
Ribadisco: IMHO, è meglio quanto ti ha detto Salvatore.
Ciao ciao,
    Rony
--
======================================================
Rony Cesana
Sistemi Informativi srl - Gruppo Liberologico
via F. Goya 2 - 56010 loc. Ghezzano - Pisa Italy
tel.: 
+39 050 877088
 - fax: 
+39 050 8755498
pers.: 
+39 347 2582666
e-mail: 
r.ce...@liberologico.com
www.liberologico.com
======================================================

 file.cpp: 'string' is used as a type, but is not defined as a type.
Devi includere <string>, ma il nome della classe non è string bensì
std::string, ovvero la classe string è contenuta nel namespace std (come
cin, cout, eccetera). Ti consiglio di leggere libro aggiornato allo
standard. Ciao.
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html