Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Eh mali problem sa klasama

[es] :: C/C++ programiranje :: Eh mali problem sa klasama

[ Pregleda: 2343 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sucur
Miljan Sucur
Web developer
Istocno Sarajevo

Član broj: 50035
Poruke: 411
*.so.pttrs.net.



+1 Profil

icon Eh mali problem sa klasama18.11.2005. u 13:02 - pre 224 meseci
Ovako, nesto sam se zezao sa klasama u C++ i naisao na jedan problem, dakle program ima rezervisanih 10 izvoda iz klase i svaka klasa ima svoje podatke.
I napravio sam neku navigaciju za odabir ID-a osobe koju hocemo da dodamo ili da citamo informacije i problem je kada dodam prvu osobu sve je uredu, al' kada dodam drugu osobu na drugi ID, on mi promijeni i podatke prve osobe sa tim i kada pozovem m[0] i m[1] dobijem iste informacije iako nisu kao takve upisane.
Bolje cete shvatiti o cemu se radi uz pomoc source-a.
PS. Znam da ima viska koda, jer ponavljam samo sam se zezao i testirao.
Code:
#include <iostream>
using namespace std;

class Covjek
{
public:
    Covjek();
    ~Covjek();
    int getAge(){return itsAge;}
    void setAge(int age){itsAge = age;}
    char *getName(){return name;}
    char *getPrezime(){return sn;}
    char *getCity(){return city;}
    char *getSch(){return sch;}
    void setName(char *sName ){ name = sName;}
    void setInfo(int god, char *ime, char *prezime, char *grad, char *skola)
    {itsAge = god, name = ime, sn = prezime, city = grad, sch = skola;}
    void getInfo(Covjek c)
    {cout << "\nIme: " << c.getName();
    cout << "\nPrezime: " << c.getPrezime();
    cout << "\nGodine: " << c.getAge();
    cout << "\nGrad: " << c.getCity();
    cout << "\nSkola: " << c.getSch() << "\n";
    }
private:
    int itsAge;
    char *name;
    char *sn, *city, *sch;
};
Covjek::Covjek()
{

};
Covjek::~Covjek()
{
};

int main()
{
    int ID = 0;
    int msg = 0;
    char ime[20], prezime[20], grad[20], skola[20];
    int godine;
Covjek man, man1;
Covjek m[10];
for(int i = 0; i <10; i++)
m[i].setInfo(0,"NA","NA","NA","NA");

while(msg != 99)
{
switch(msg)
{
case 1:
    cout << "\nOdaberite ID osobe: ";
    cin >> ID;
    msg = 0;
break;
case 2:
    m[ID].getInfo(m[ID]);
    msg = 0;
    break;
case 3:
    cin.ignore(1);
    cout << "\nUnesite ime: ";
    cin.getline(ime, 20);
    cout << "Unesite prezime: ";
    cin.getline(prezime, 20);
    cout << "Unesite godine: ";
    cin >> godine;
    cin.ignore(1);
    cout << "Unesite grad: ";
    cin.getline(grad, 20);
    cout << "Unesite skolu: ";
    cin.getline(skola, 20);
    m[ID].setInfo(godine, ime, prezime, grad, skola);
    msg = 0;
    break;

default:
    cout << "\nTrenutni ID: " << ID;
    cout << "\nOdaberite oblast: ";
        cin >> msg;
        break;
}
}
cout << m[0].getName();
cout << m[1].getName();
cout << "\n" << m[2].getName();
cout << "\n\n\n";
};
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.dsl.pipex.com.



+4 Profil

icon Re: Eh mali problem sa klasama18.11.2005. u 13:27 - pre 224 meseci
Code:
void setName(char *sName ){ name = sName;}


Ovo je veliko no-no, OSIM ako char *sName nije unapred alociran i validan sve vreme postojanja tvog objekta.
U tvom sluchaju, pointer na string unutar klase ti uvek pokazuje na istu adresu za sve instance.

Dakle, ili rezervishi memoriju za char* unutar tvoje klase i kopiraj string (umesto shto samo kopirash pointer), ili koristi std::string ili neku slichnu klasu koja automatski alocira memoriju i kopira stringove.

 
Odgovor na temu

[es] :: C/C++ programiranje :: Eh mali problem sa klasama

[ Pregleda: 2343 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.