Newsgroup: it.comp.lang.c++
Titolo: ho iniziato ora ad imparare il c++ help

salve a tutti
come da Oggetto, ho iniziato ora a cimentarmi, in modo del tutto
autodidatta, con
l'ambiente di sviluppo c++, e volevo porre un paio di domande a chi avesse
la
disponibilità e gentilezza di rispondere.
Ho fatto un programmino che non serve a nulla ma solo a provare le classi
e un po' di istruzioni ma, trovo dei problemi e mi piacerebbe capire dove
sbaglio.
Perdonate la grossolanita del codice ma, come appena detto, sond el tutto
NEOFITA
in questo linguaggio.
il programma e il seguente.......
// Librerie necessarie "standard e quella per le stringhe
#include <iostream.h>
//#include <stdio.h>
#include <string.h>
#include <conio.h>
// definizione di una classe
class CLibro {
protected:
 int  npagine;
private:
 char titolo[40];
 char autore[40];
 char editore[40];
 // queste devono essere pubbliche perche son funzioni
 // che variano le variabili private
public:
 void stampalibro();
 void leggipagine(int l);
 void leggititolo(char v[40]);
 void leggiautore(char z[40]);
 void leggieditore(char o[40]);
};
class CEsercizi:public CLibro {
 int Nesercizi;
public:
 void legginumeroesercizi(int q);
 float leggioccupaesercizio(void);
};
// semplice scorciatoia (dichiarazione di una funzione richiamabile
void acapo() {
 cout << endl;
};
float CEsercizi::leggioccupaesercizio(void) {
  float prova;
  prova =  npagine / Nesercizi;
  return prova;
};
void CEsercizi::legginumeroesercizi(int q) {
 Nesercizi = q;
};
// richiamo di una funzione all'interno di una classe
// e passaggio di parametri
void CLibro::stampalibro(){
 acapo();
 acapo();
 cout << "******************************************" << endl;
 acapo();
 cout << "Qesto e' il libro che hai scelto: "   << titolo << endl;
 cout << "l'autore e': " << autore << endl;
 cout << "l'editore e': " << editore << endl;
 acapo();
 cout << "Il Libro scelto ha esattamente n." << npagine << " pagine" <<
endl;
 acapo();
};
// idem come sopra
void CLibro::leggipagine(int l) {
 npagine = l;
};
void CLibro::leggititolo(char v[40]){
 strcpy(titolo, v);
};
void CLibro::leggieditore(char z[40]){
 strcpy(editore, z);
};
void CLibro::leggiautore(char o[40]){
 strcpy(autore, o);
};
// inizio del programma vero e proprio
void main() {
// creazione degli oggetti di tipo classe ** CLibro ** e sottoclasse **
CEsercizi **
CLibro testo[2];
CEsercizi eserciziario;
// variabili temporanee che mi permettono di fare conti e di assegnare
valori
// alla classe
int temp;
char temp2[40];
char temp3[40];
char temp4[40];
int i;
for (i=0;i<3; i++) {
//system(cls);
cout << "Immetti un titolo: ";
cin >> temp2;
cout << "Immetti ora L'autore del libro: ";
cin >> temp3;
cout << "Ora invece, manca solo l'editore. Immettilo!: ";
cin >> temp4;
cout << "Quante pagine ha il libro? ";
cin >> temp;
testo[i].leggipagine(temp);
testo[i].leggititolo(temp2);
testo[i].leggiautore(temp3);
testo[i].leggieditore(temp4);
int scelta = 0;
cout << "Il libro scelto e' un indirizzario? " << endl;
cout << "Scegli '0' per dire 'SI'";
acapo();
cin >> scelta;
int temp0;
//char S,s;
// qui non riesco ad associare la "S" alla variabile scelta nemmeno
inizializzando la S come variabile stringa avevo
// if (scelta == S || s) {;
if  (scelta == 0) {
 //eserciziario = testo[i];
 cout << "quanti esercizi contiene il libro? ";
 cin >> temp0;
 eserciziario.legginumeroesercizi(temp0);
 testo[i].stampalibro();
 acapo();
 cout << "gli esercizi occupano esattamente n." <<
eserciziario.leggioccupaesercizio() << "  l'uno!!";
 acapo();
}
 else
 testo[i].stampalibro();
};
}
FINE PROGRAMMA
Per compilare uso (e qui vi chiedo un consiglio) Visual C++ 60,
quale  altro compilatore mi consigliate tenendo presente che poi, una volta
imparato bene il c++
iniziero anche con le MFC?
i problemi che incontro sono i seguenti...
1) Non riesco a mettere un comando che cancella lo schermo all'interno del
for,
[ho provato a dichiarare #include <conio.h> e clrscr(); oppure con
system(cls); ma nulla mi da errore di compilazione]
che ad ogni libro scelto mi appaia una finestra pulita senza le risposte
precedenti;
2) la condizione if, non riesco a fargli fare il controllo sulla stringa "S"
per si o per no.
infatti, come potete notar ho messo if (scelta == 0) per ovviare al
problema.
3) esercizio.leggioccupaesercizio() mi restituisce un valore assurdo.....
come mai???
4) mi fate capire gli errori di base ci sono nella mia programmazione e
utilizzo delle classi, considerando
la premessa che ho iniziato ora a cercar di capirci qualcosina e che il
presente programma e solamente una
prova per poter imparare?
Infine.. Vi prego di perdonare la mia poca esperienza ma .. da qualche parte
si deve pursempre iniziare.
P.S. Mi consigliate testi (in italiano perfavore) da acquistare dove poter
apprendere il piu possibile su c++
che parta da basi piu o meno elementari?
Grazie dell'attenzione..
Francesco.

 che parta da basi piu o meno elementari?
Cerca dei tutorial sulla programmazione ad oggetti su Internet.
Ciao!
Azathot

 Cerca dei tutorial sulla programmazione ad oggetti su Internet.
???
E che c'entra???
Io direi:
- Lippman-Lajoie C++ "Corso di programmazione". terza edizione
- Bruce Eckel "Thinking in C++"
    (lo trovi anche da scaricare su 
www.bruceeckel.com
)
- Stroustrup "C++, linguaggio, libreria standard, principi di
    programmazione". Terza edizione
--
Gerolamo

 Mi sembrava ci fossero limitazioni, ma non ne sono sicuro.
Se non vado errato sono riservati al compilatore. Nel dubbio meglio
metterlo alla fine, se proprio si vuole utilizzarlo.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

     programmazione". Terza edizione
Questo lo escluderei: troppa carne al fuoco, troppo teorico.
Ciao!
Azathot

 che sta includendo una cosa diversa.
le tue guerre personali tienile fuori dal newsgroup non ci interessano..
Non è la fine del mondo se ha scritto questa cosa, puoi dire la tua senza
creare flame inutili.
ciao

 metterlo alla fine, se proprio si vuole utilizzarlo.
Non č vero. Lo standard C++ (punto 17.4.3.1.2) recita:
   Each name that begins with an underscore is reserved 
   to the implementation for use as a name in the global 
   namespace
Il passo saliente č: "in the global namespace". Quindi tutto ciň che non
ha valenza globale (esempio parametri di metodi e funzioni) non č soggetto
ad alcun vincolo.
Per maggiori informazioni consiglio l'ottimo articolo di Carlo Pescio,
pubblicato su
 
http://www.eptacom.net/pubblicazioni/pub_it/iso_10.html
Ciao!
Azathot

Azathot

 Questo lo escluderei: troppa carne al fuoco, troppo teorico.
Infatti li avevo messi in ordine di preferenza, per chi inizia col C++.
Comunque, probabilmente, lo Stroustrup prima o poi va
comprato lo stesso per usarlo come manuale di riferimento.
(a meno di usare direttamente lo standard...)
ciao
--
Gerolamo

 dire la tua senza creare flame inutili.
Flame?
A me pare un thread tranquillissimo.
--
Gerolamo

 A me pare un thread tranquillissimo.
Non ricordi le ultime volte che hai detto le stesse cose?
fai finta di non capire ?
tutto il messaggio l'hai ridotto nel dire che non esiste flame?
semmai volevi dare una risposta forse c'era altro da dire.
ciao :))


Ammetto di aver dato una risposta inutile (la mia) a un post
inutile (il tuo).
Adesso per favore piantiamola e torniamo a parlare di C++.
--
Gerolamo

 (a meno di usare direttamente lo standard...)
Personalmente l'ho comprato, l'ho letto e l'ho regalato. Al mio peggior
nemico. :)
Ciao!
Azathot

 A me pare un thread tranquillissimo.
E allora perché mi chiami Azimuth? Non so neanche chi sia!
Azathot

 Adesso per favore piantiamola e torniamo a parlare di C++.
speriamo che sia sempre cosi' :))
ciao

 le macro non hanno scope.. e son libere di usare il _ prefisso ...
Le macro non sono libere di usare identificatori che iniziano con
underscore seguito la lettera minuscola, proprio perche' questi devono
rimanere a disposizione del programmatore.
Purtroppo non tutti i compilatori rispettano la regola.
        Mauro

 le macro non hanno scope.. e son libere di usare il _ prefisso ...
Le macro non appartengono al compilatore, bensģ al preprocessore, e quindi
sono soggette a regole diverse.
Ciao!
Azathot

Purtroppo non tutti i compilatori rispettano la regola.
I nomi con underscore seguito da lettera minuscola sono
riservati come simboli globali, sono invece ammessi come
simboli locali o attributi di una classe.
Una semplice regola e' evitare di usare underscore
iniziali in genere... pero' per qualche strano motivo
ci sono molti programmatori che non riescono a evitare
queste perversioni.
Andrea

    namespace
Grazie dell'info!
