[ itf @ 21.08.2008. 12:56 ] @
Naletio sam na mali problem pri pisanju predloška klase:

Code:
#include <iostream.h>

template <class T>
class Polje
{
    public:
        T* polje;

        Polje(int n){
            polje = new T[n];
        }
        ~Polje() {delete[] polje;}
        T operator [](int indeks){
            return polje[indeks];
        }
};
int main(int argc, char* argv[])
{
    Polje <int> A(10);

    for(int i = 0; i < 10; i++)
        A.polje[i] = i;

    cout << A[5];  // vraća A.polje[5]
    A[5] = 10; // greška!
    return 0;
}


Stvar je u tome što želim implementirati operator [] na način da se preko njega može adresirati polje unutar predloška, i to PRILIKOM INICIJALIZACIJE neke vrijednosti tj. pri upotrebi operatora =. Kao što vidite, implementacija radi kada treba vratiti vrijednost nekog elementa u polju na nekom indeksu, ali kada tom istom elementu polja želim dodati vrijednost onda ne radi.

Iskreno, ne znam kako da implementiram operator pridruživanja za ovaj slučaj...
[ xeron @ 21.08.2008. 15:16 ] @
Evo stavio sam neke ispravke sa komentarima, pa javi je li sada ok.
Code:

#include <iostream>
using namespace std;

template <class T>
class Polje
{
    public:
        T* polje;

        Polje(int n){
            polje = new T[n];
        }
        ~Polje() {delete[] polje;}

        // subscript operator za nekonstantne objekte
    // vraca lvalue koja se moze modificirati
        T &operator [] (int indeks){
            return polje[indeks];
        }
    
    // subscript operator za const ... rvalue
    T operator [] (int index) const{
        return polje [index];
    }

};
int main(int argc, char* argv[])
{
    Polje <int> A(10);

    for(int i = 0; i < 10; i++)
        A.polje[i] = i;

    cout << "Vrijednost A[5] :"<< A[5] << endl;      // vraća A.polje[5]
    A[5] = 10;                         // dodjela je sada ok
    cout <<"Vrijednost A[5] nakon dodjele: "<< A[5] << endl;
    return 0;



Citat:

./subscript
Vrijednost A[5] :5
Vrijednost A[5] nakon dodjele: 10