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

Klase i nizovi (pocetnicko pitanje)

[es] :: C/C++ programiranje :: C/C++ za početnike :: Klase i nizovi (pocetnicko pitanje)

[ Pregleda: 4295 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Klase i nizovi (pocetnicko pitanje)15.09.2004. u 13:46 - pre 195 meseci
Pozdrav svima,
prave mi problem nizovi u okviru klase.
Deklarisu se ok ali ne mogu da ih pozovem
Ime_Klase.Ime_Niza[Redni_Br] ne moze da ga pozove.
Koja je sintaksa za ovo?

The sleeper has awaken
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.smin.sezampro.yu.

ICQ: 197419540


Profil

icon Re: Klase i nizovi (pocetnicko pitanje)15.09.2004. u 14:59 - pre 195 meseci
Kako je deklarisan niz u okviru klase (public, private)?
Kakve konkretne greške ti prijavljuje kompajler?
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)15.09.2004. u 17:19 - pre 195 meseci
Citat:
Ime_Klase.Ime_Niza[Redni_Br] ne moze da ga pozove.
Pošalji primer.

Ovako na neviđeno bih rekao da je problem što referišeš ime klase a ne ime instance. Takođe, ako je u pitanju ime klase, onda se za pristup koristi operator :: a sam niz mora da bude statički i (verovatno) javan. Međutim, kako je to loš dizajn, verovatno greška postoji i mnogo pre. Kažem, pošalji primer da vidimo šta je po sredi.

f
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 10:43 - pre 195 meseci
Kod izgleda ovako:


#include<iostream.h>
#include<math.h>

class Matrica
{ public:
float niz[16];
Matrica(float niz[16]);
};
Matrica::Matrica(float niz_unos[])
{for(int i=0;i<16;i++)
niz=niz_unos;

}
void main()
{
float Niz_Probni[16]={ 1,2,3,4,
3,7,2,1,
5,6,1,3,
3,2,1,1};
Matrica M(Niz_Probni);
for(int i=0;i<16;i++)
cout<<" "<<Matrica.niz[1];
}


The sleeper has awaken
 
Odgovor na temu

janjam

Član broj: 34603
Poruke: 69
212.200.96.*



+16 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 11:44 - pre 195 meseci
Kao sto rece filmil - referišeš ime klase a ne ime instance...
Probaj ovako:

Code:

class Matrica

    public:
        float niz[16];
        Matrica(float niz[16]);
};
Matrica::Matrica(float niz_unos[])
{
    for(int i=0;i<16;i++)
    niz[i]=niz_unos[i];
}

void main()
{
    float Niz_Probni[16]={ 1,2,3,4, 
                                 3,7,2,1,
                                 5,6,1,3,
                                 3,2,1,1};
    Matrica *M;
    M = new Matrica(Niz_Probni);    
    for(int i=0;i<16;i++)
        cout<<" "<<M->niz[i];
}


Ovo ti je sa minimalnim izmenama tvog koda, mada ovo moze i malo elegantnije da se odradi.
 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 12:01 - pre 195 meseci
Evo nekih minimalnih izmena (naznacene sa !!!!) da ti program proradi:
Code:

#include <iostream>
#include <cstdlib>
using namespace std;
class Matrica{ 
   public:
   float niz[16];
   Matrica(float niz[16]);
};
Matrica::Matrica(float niz_unos[]){
    for(int i=0;i<16;i++)
    niz[i]=niz_unos[i];    // !!!! imao si niz=niz_unos
}
int main(int argc, char *argv[]){    // !!!! main je po standardu int
   float Niz_Probni[16]={ 1,2,3,4, 3,7,2,1, 5,6,1,3, 3,2,1,1};
   Matrica M(Niz_Probni);    // !!!! Matrica je tip, a M instanca (nju koristi nadalje)
   for(int i=0;i<16;i++) cout<<" "<<M.niz[i];    // !!!! imao si Matrica.niz[1]
    system("PAUSE");    
      return 0;
}

 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 12:06 - pre 195 meseci
Ops neko je bio brzi, sada imas dva prilaza ... ali ti nece skoditi nijedan
 
Odgovor na temu

janjam

Član broj: 34603
Poruke: 69
212.200.96.*



+16 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 12:35 - pre 195 meseci
Samo jedan mali dodatak kod mog koda, u main-u na kraju dodaj jos jednu liniju:

Code:

    delete M;


*ebi ga, ipak je ovo C++.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 13:02 - pre 195 meseci
Pa zašto je M uopšte bilo na heapu?

Lepo staviš

Code:

 Matrica M(Niz_Probni);
 for(int i=0;i<16;i++)
    cout<<" "<<M.niz[i];


i uživaš.

Stack je najbolji GC.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.decis.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 14:52 - pre 195 meseci
Citat:
Stack je najbolji GC.
Osim ako radiš na mašini sa ograničenom veličinom steka.

f
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 15:37 - pre 195 meseci
I neogrančienom veličinom heapa.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.decis.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 16:05 - pre 195 meseci
Citat:
 I neogrančienom veličinom heapa.
Nije isto. :)
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.smin.sezampro.yu.

ICQ: 197419540


Profil

icon Re: Klase i nizovi (pocetnicko pitanje)16.09.2004. u 18:28 - pre 195 meseci
Ako će alocirati mnogo takvih objekata prema potrebi i prema potrebi ih brisati bolje je na heap-u, štedi memoriju.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Re: Klase i nizovi (pocetnicko pitanje)17.09.2004. u 08:27 - pre 195 meseci
1. Zar ne brises ceo M ako mu odradis deleate, bez dalje opcije prilaza tim podacima?

2. Koja je razlika izmedju ubijanja pomocu destruktora i ovog delete?

3.Stek i Heap? Ako ih dobro razumem onda imam brz pristup necemu
na steku koji je fizicki deo procesora\karte, a heap deo na HDD-u odvojen
za rad koji je bitno sporiji?


The sleeper has awaken
 
Odgovor na temu

janjam

Član broj: 34603
Poruke: 69
212.200.96.*



+16 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)17.09.2004. u 09:11 - pre 195 meseci
1. Naravno. Delete odradis na kraju manipulacije sa instancom sto je gore i navedeno (na kraju main()).
2. Pa prakticno gledano - nema razlike. Svako pozivanje new alocira prostor u memoriji pomocu konstruktora, a svako pozivanje delete dealocira taj prostor pomocu destruktora. Delete ti je ustvari "ubijanje pomocu destruktora". Gledaj na to kao na pozajmljivanje parcenceta memorije od OS-a, i na kraju vracanje istog OS-u.
3. Heap je deo memorije (RAM-a), a ne HDD-a.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)17.09.2004. u 10:03 - pre 195 meseci
Citat:
 1. Zar ne brises ceo M ako mu odradis deleate, bez dalje opcije prilaza tim podacima?

Da.

Citat:
2. Koja je razlika izmedju ubijanja pomocu destruktora i ovog delete?
delete uključuje i pozivanje destruktora.
Citat:
3.Stek i Heap? Ako ih dobro razumem onda imam brz pristup necemu
na steku koji je fizicki deo procesorakarte, a heap deo na HDD-u odvojen
Najčešće su oba dela memorije u memoriji (dakle ne fizički na procesoru). Ali stek često ima „povlašćen“ pristup i može da bude (jako) mali. Heap je ime za deo memorije u kome završavaju dinamički alocirani objekti.

f
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Klase i nizovi (pocetnicko pitanje)17.09.2004. u 10:04 - pre 195 meseci
Citat:
Gledaj na to kao na pozajmljivanje parcenceta memorije od OS-a, i na kraju vracanje istog OS-u.
Zapravo najčešće nije tako. Obično posle brisanja, program ne vraća memoriju operativnom sistemu pošto bi to narušilo brzinu rada. Oslobođena memorija se umesto toga čuva za nove dinamičke objekte.

f
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
195.252.80.*

ICQ: 197419540


Profil

icon Re: Klase i nizovi (pocetnicko pitanje)17.09.2004. u 13:58 - pre 195 meseci
Moraš da vodiš računa o nečemu. Ako alociraš objekte na heap-u ti ih referenciraš preko pokazivača (koji pokazuje na memorijski prostor koji ti je sistem rezervisao za taj objekat i koji je veličine objekta). delete dealocira taj prostor, ako to ne uradiš možeš proizvesti takozvano curenje memorije (prostor je alociran a nemoguće ga je više koristiti), primer za to je objekta a zatim inicijalizacija na nultu vrednost što znači da je pokazivač prazan (ne pokazuje više na dati objekat).

Objekat *n = new Objekat();
n = 0; pokazivač više ne pokazuje na prostor na heapu, a memorija nije prethodno dealocirana.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.siemens.at.



Profil

icon Re: Klase i nizovi (pocetnicko pitanje)04.11.2004. u 11:14 - pre 193 meseci
Evo i mog rjesenja nesto fleksibilnijeg:

Code:


#include <iostream> // nema vise iostream.h
#include <string>

template <typename T, int SZ> // da bi omogucili da radimo sa svim buit-in tipovima, bez alokacije
class Matrica {
    T niz[SZ];
public:
    Matrica(const T *arr);
    T Get(int indx);
};

template <typename T, int SZ>
Matrica<T,SZ>::Matrica(const T *arr)
{
    memcpy(niz, arr, sizeof(T)*SZ);
}

template <typename T, int SZ>
T Matrica<T,SZ>::Get(int index)
{
    return niz[index];
}

typedef float TIP;
#define SIZE(x) (sizeof(x)/sizeof(x[0]))

void main()
{
    TIP Niz_Probni[16]={ 1,2,3,4,3,7,2,1,5,6,1,3,3,2,1,1};

    Matrica<TIP, SIZE(Niz_Probni)> m(Niz_Probni);

    std::cout << m.Get(5);
}
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Klase i nizovi (pocetnicko pitanje)

[ Pregleda: 4295 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

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