[ Ramirez @ 28.04.2004. 13:15 ] @
dakle ovo je klasa "skup" i metoda koja proverava da li se neka cifra nalazi u skupu i metoda koja dodaje neku cifru u skup (pod uslovom da se ona vec ne nalazi u njemu)... zanemarite nedostatak konstruktora destruktora i svega ostalog.....

Code:

//header.h
class Skup {
  int *niz, duz;
public:
  bool operator% (int b) const;
  Skup& operator+= (int b);
};

//methods.cpp
bool Skup::operator% (int b) const {
  for (int i=0; i<duz; i++)
    if (niz[i] == b) return true;
  return false;
}

Skup& Skup::operator+= (int b) {
  if (! (*this % b)) {
    int *n = new int [duz+1];
    for (int i=0; i<duz; i++) n[i] = niz[i];
    n[duz++] = b;
    delete [] niz;
    niz = n;
  }
  return *this;
}


mene zanima sledece:
1. zasto postoji ono const u definiciji operatora % ???
2. zar ne postoji bolji nacin za realociranje memorije.... jer sve sto treba da se uradi je da se alocira jos jedno mesto na kraju niza a da se vrednosti sacuvaju. Prosto mi je neverovatno da ne to ne moze da se uradi na laksi nacin???
[ Dragi Tata @ 28.04.2004. 16:04 ] @
1) const je naznaka kompajleru da je funkcija "accessor", tj da može da čita promenljive članice klase, ali ne i da ih menja.

2) Ne samo da može, nego i treba:

Code:

//header.h
class Skup {
  std::vector<int> niz;
public:
  bool operator% (int b) const;
  Skup& operator+= (int b);
};

//methods.cpp
bool Skup::operator% (int b) const {
  for (int i=0; i<niz.size(); i++)
    if (niz[i] == b) return true;
  return false;
}

Skup& Skup::operator+= (int b) {
  if (! (*this % b)) {
  niz.push_back(b);
  }
  return *this;
}