[ Fidelito_Castro @ 07.04.2008. 23:25 ] @
Zanima me da li moze funkciji da se pozove funkcija po adresi(call by address) kada je u pitanju objekat neke klase.

Na primer: probao sam da prosledim objekat klase string,po vrednosti i po referenci.I to funkcionise bez problema.
Medjutim kada sam pokusao da prosledim objekat klase string po adresi,prevodioc ne prijavljuje gresku ali ipak tu nesto ne stima.

Evo koda:

Code:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

void Zameni(string*, string*);

int main(int argc, char *argv[])
{
    string linija,
           red;
    
    //Unos podataka sa tastature
    cout<<"Unesite prvi red: ";
    getline(cin, linija);
    
    cout<<"Unesite drugi red: ";
    getline(cin, red);
    
    
    //Pre zamene objekata klase string
    cout<<"Pre zamene!!!"<<endl;
    cout<<"-------------"<<endl;
    cout<<"Linija : "<<linija<<endl;
    cout<<"Red    : "<<red<<endl;
    
    
    //Po vrednosti OK!!!
    //Po referenci OK!!!
   //Poziv funkcije po adresi ?????
    Zameni(&linija, &red);
    
    //Nakon zamene objekata klase string
    cout<<endl;
    cout<<"Nakon zamene!!!"<<endl;
    cout<<"---------------"<<endl;
    cout<<"Linija: "<<linija<<endl;
    cout<<"Red   : "<<red<<endl;
    
    cout<<endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
//Definicija funkcije za zamenu objekata klase string
void Zameni (string* tekst1, string* tekst2)
{
     string* temp;
     *temp = *tekst1;
     *tekst1 = *tekst2;
     *tekst2 = *tekst1;
     return;
}


[ Eurora3D Team @ 08.04.2008. 00:34 ] @
Sa ovim kodom nisi ni mogao da to uradis i da se tako radi
Code:

     string* temp;
     *temp = *tekst1;
     *tekst1 = *tekst2;
     *tekst2 = *tekst1; // ovde bi po logici trebalo temp umesto text1 jer je u text1 jedan vec dodeljeno text2 pa bi bilo text2=text2
     return;

Pogledaj kod ispod. Napisao sam ti i kratke komentare.
Pozdrav
Code:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

void Zameni(string*, string*);

int main(int argc, char *argv[])
{
    string* linija; // samo pointeri mogu da menjaju adrese
    string* red; // samo pointeri mogu da menjaju adrese
    linija = new string(); // adresa dodeljena dinamicki
    red = new string(); // adresa dodeljena dinamicki

    //Unos podataka sa tastature
    cout<<"Unesite prvi red: ";
    getline(cin, *linija); //menjano

    cout<<"Unesite drugi red: ";
    getline(cin, *red); //menjano


    //Pre zamene objekata klase string
    cout<<"Pre zamene!!!"<<endl;
    cout<<"-------------"<<endl;
    cout<<"Linija : "<<*linija<<endl; //menjano
    cout<<"Red    : "<<*red<<endl; //menjano


    //Po vrednosti OK!!!
    //Po referenci OK!!!
    //Poziv funkcije po adresi ?????
    Zameni(linija, red);

    //Nakon zamene objekata klase string
    cout<<endl;
    cout<<"Nakon zamene!!!"<<endl;
    cout<<"---------------"<<endl;
    cout<<"Linija: "<<*linija<<endl; //menjano
    cout<<"Red   : "<<*red<<endl; //menjano

    cout<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
//Definicija funkcije za zamenu objekata klase string
void Zameni (string* tekst1, string* tekst2)
{
    string temp1=*tekst1; // na sta pokazuje ovde
    *tekst1 = *tekst2; // menjamo sadrzaj prvog i
    *tekst2 = temp1; //   drugog pokazivaca
    //sadrzaj (ono na sta pokazuje) menjamo sa *pokazivac
    return;
}
[ Fidelito_Castro @ 08.04.2008. 06:51 ] @
Hvala na pomoci!
[ Eurora3D Team @ 08.04.2008. 23:38 ] @
Nista ... i drugi put :)