Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: help ...  (Citit de 1447 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
crawler
Vorbaret
****

Karma: 105
Deconectat Deconectat

Mesaje: 161



Vezi Profilul
« : Aprilie 01, 2009, 16:03:41 »

vreau sa definesc operatorul ++ pe o structura

in mod normal am

struct Nod
{
     int a;
     Nod *x;
};

si parcurg o lista de adiacenta asa

for (Nod *it=l[nod];it;it=it->x)

si as vrea sa pot defini operatorul ++ ca sa pot face asta

for (Nod *it=l[nod];it;++it)

sau

for (Nod *it=l[nod];it;it++)

ar arata mai bine sursele Smile
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #1 : Aprilie 01, 2009, 19:12:07 »

Cred ca poti daca declari o functie de tip operator, te folosesti de supraincarcarea operatorilor Very Happy
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #2 : Aprilie 01, 2009, 19:15:10 »

poti face ceva de genu
Cod:
#define ++it it = it -> x
Dar nu stiu cat de indicat e Smile
Memorat
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #3 : Aprilie 01, 2009, 20:14:46 »

Nu cred ca ai cum sa definesti operatorul ++ cum vrei tu.
Nu poti sa supraincarci operatorul ++ pentru ca tu faci operatia pe un pointer, iar din cate stiu pointerii nu sunt tipuri de date.
Daca faci cum a spus Andrei dezavantajul este ca nu vei mai putea folosi operatorul ++ decat cu pointeri, si nu il vei mai putea folosi pentru intregi, spre exemplu.
Cod:
#define ++it it = it -> x
int a = 0;
++a; // da eroare, se transforma in a = a -> x si a nu e pointer

Pentru a permite o astfel de scrieri, in structurile de date din STL se folosesc iteratorii, dar acestia sunt niste clase mai speciale definite in interiorul clasei parinte.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #4 : Aprilie 01, 2009, 20:27:42 »

Prin supraincarcarea operatorului, poti face:
Cod:
#include<stdio.h>
#include<stdlib.h>
struct nod
     {
      int info;
      nod *urm;
      void out(nod *);
      private :
      operator +(nod *&p)
      {
       p=p->urm;
      }

     };
typedef nod *Lista;
inline void Insert(Lista &prim,Lista p,int x)
     {
      Lista q=(Lista)calloc(1,sizeof(Lista));
      q->info=x;
      if(prim) q->urm=p->urm,p->urm=q;
else q->urm=prim,prim=q;
     }
void nod::out(nod *p)
   {
    while(p)
{
  printf("%d ",p->info);
  operator+(p);
}
   }
int main()
  {
   int m,n,x;
   Lista prim=NULL,ultim=NULL;
   printf("n="); scanf("%d",&n);
   m=n;
   while(n)
       {
    printf("x="); scanf("%d",&x);
    if(prim) Insert(prim,ultim,x),ultim=ultim->urm;
      else Insert(prim,NULL,x),ultim=prim;
    --n;
}
   prim->out(prim);
   system("PAUSE>NULL");
  }
Desi cum vezi te complici, dar ma rog.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #5 : Aprilie 01, 2009, 23:32:05 »

Pentru a permite o astfel de scrieri, in structurile de date din STL se folosesc iteratorii, dar acestia sunt niste clase mai speciale definite in interiorul clasei parinte.

Aceasta este si recomadarea mea, sa folosesti iteratori. Te poti uita peste implementarile din STL Wink
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines