|
-pastreaza cuvantul citit in memoria heap;
-realizeaza initializarile;
frecv = 1;
urm = 0.
*/
{
char t[255] ;
int sf;
cuvint = 0;
if (tnod : : ind = = false) {
while ( (sf = scanf ( "%s",t)) ! = EOF ) {
char *p = t ;
int c ;
// salt peste caractere care nu sant litere
while ((c =*p)&&(c<'A'||C>'Z'&&
c<'a'||c>'z'))
p++;
if ( c = = 0 ) //nu sant litere
continue;
//pastreaza inceputul cuvantului
char *q = p ;
//cauta inceputul cuvantului
while ((c=*p)&&(c>='A'&&c<='z' ||
c >= 'a' &&c <='z' ))
p++ ;
*q = '\0' ; //caracterul NUL la sfarsitul cuvantului
//rezerva zona pentru cuvantul in memoria heap
//se apeleaza operatorul new standard
printf ( " tnod : : tnod %lu\n" , coreleft () );
if ( ( cuvant = new char[strlen(q) +1] ) = = 0 ) {
printf ( " memorie insuficienta\n" ) ;
exit (1) ;
}
printf( " tnod : : tnod %lu\n" , coreleft () ) ;
//se transfera cuvantul in zona rezervata
strcpy ( cuvant , q );
//initializari
frecv = 1 ;
urm = 0 ; //pointerul nul
break;
} //sfarsit while
if ) sf = = EOF ) //s-a intalnit EOF
tnod : : ind = true ;
}
} // sfarsit constructor
inline tnod : : ~ tnod ( )
{
//se apeleaza operatorul delete standard
printf ("\ndestructor tnod %lu\n",coreleft ( ) );
delete cuvint ;
printf ("\ndestructor tnod %lu\n",coreleft ( ) );
}
inline void tnod::afistnod() //afiseaza cuvantul si frecventa
{
printf ("cuvantul=%s\t are frecventa=%d\n",cuvant,frecv) ;
{
tnod *p ;
//se aplica operatorul new standard
printf (" operator new %\lu\n", coreleft ( ) ) ;
p=(tnod *) new char [lung] ;
printf (" operator new %\lu\n", coreleft ( ) ) ;
return p ;
}
void tnod::operator delete(void*p) //supraincarcarea operatorului delete
{
//se aplica operatorul delete standard
printf (" operator delete %\lu\n", coreleft ( ) ) ;
: : delete p ;
printf (" operator delete %\lu\n", coreleft ) ) ;
}
void tnod : : operator ++ ( ) //incrementeaza frecv
{
frecv++ ;
}
Boolean tnod : : retind ( ) //returneaza valoarea ind
{
return tnod : : ind ;
}
Observatie
Functia coreleft returneaza dimensiunea,in octeti, a memoriei
libere in momentul apelului.Ea a fost apelata in mai multe functii pentru a
putea urmari momentele in care se dezaloca obiectele care sant instantieri
ale clasei tnod.
23.12 Sa se defineasca tipul abstract slist pentru implementarea listei
simplu inlantuite.
Listele simplu inlantuite au fost implementate in limbajul C in capitolul
11.
Pentru gestiunea listelor simplu inlantuite s-au folosit doua variabile
prim si ultim care sant pointeri sper primul si respectiv ultimul nod al
listei.
Aceste valori se vor utiliza si in cazul de fata cu acelasi
scop.Ele sunt date membru protejate ale tipului abstract slist
Avantajul implementarii tipului abstract slist este acela ca , se
pot defini simultan si simplu orice obiecte de tip lista.
Functiil |