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

const array member

[es] :: C/C++ programiranje :: const array member

[ Pregleda: 3398 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu



+64 Profil

icon const array member04.08.2003. u 14:50 - pre 213 meseci
Da li je možno deklarisati const array npr.
Code:

class A {
...
const int a[3][3];
...
};

kao člana klase i kako se to inicijalizuje?
Kol'ko sam ja upućen const member mora da se inicijalizuje u konstruktoru (logično), ali nije dozvoljeno "=". Ne da mi ni u listi inicijalizacije jer kaže da se tako ne može inicijalizovati array.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: const array member04.08.2003. u 15:49 - pre 213 meseci
Nisam siguran, ali mislim da prema C++ standardu to ne moze da se uradi... Neko resenje bi mozda eventualno bilo da taj "konstantni" niz pretvoris u staticki konstantni niz... Evo kako bi to moglo da izgleda:
Code:

#include <iostream>
#include <stdlib.h>

using namespace std;

class A
{
    public:
        static const int a[3][3];
}; // A

const int A::a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};

int main(int argc, char** argv)
{
    A bla;
    
    cout << bla.a[1][2] << endl;
    
    system("PAUSE");
    return 0;
}


P.S. kod nije portabilan! ;) (system("PAUSE"))
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu



+64 Profil

icon Re: const array member05.08.2003. u 08:20 - pre 213 meseci
Da to je i meni palo na pamet. Čak je donekle i logično da ono što je const bude i static u klasi, jer ga dele sve instance. Ali me ipak zanima da li je ovako nešto moguće...
 
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: const array member06.08.2003. u 15:57 - pre 213 meseci
Đes' Darko. Sinoć sam nešto kodirao (posle dužeg vremena, na odmoru sam nekoliko dana ) , hteo sam za svoju klasu koja čuva objekte (podatke o vertexima, licima itd) da dodam matricu kao član klase. Međutim izgleda da ti je jedino rešenje inicijalizacija u konstruktoru, probao sam i sa klasičnom inicijalizacijom:

float matrix[4][4] = {član1, član2 …, poslednji član};

ali ovo ne radi. Znači ipak ćeš morati da inicijalizuješ sve članove u konstruktoru i to kroz petlju (kada se jednom deklariše, ako se ne inicijalizuju članovi što nisi mogao pošto je matrica članica klase, mora se inicijalizovati član po član).
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu



+64 Profil

icon Re: const array member07.08.2003. u 11:07 - pre 213 meseci
Evo me... Ja mesecima nisam ništa pisao... A evo čim krenem, problemi ;)

Fora u ovom primeru je što se traži const, što ti ne dozvoljava da pišeš jednako. Dakle ne može tako da se inicijalizuje (može ako nije const).
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.ppp-bg.sezampro.yu

ICQ: 197419540


Profil

icon Re: const array member07.08.2003. u 17:51 - pre 213 meseci
Pazi sta si uradio u inicijalizaciji niza. Izgleda da si definisao const pokazivač, a ne const članove. Proveri malo sintaksu, možda ovo pomogne.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.ppp-bg.sezampro.yu

ICQ: 197419540


Profil

icon Re: const array member07.08.2003. u 17:52 - pre 213 meseci
Eurekaa, viknu Arhimed iz kade i reče:

Evo rešenja, (trivijalnog).

u zaglavlju:
Code:

klasa{
static const float niz[3][3];
}

u .cpp fajlu:
Code:

const float klasa::niz[3][3] = {štagod,članova…};

Pazi ova posledna deklaracija mora biti u globalnom opsegu (ne u konstruktoru).

Leka je bio u pravu izgleda da nikako ne može da se inicijalizuje const ne static niz.

Ovo isprobano radi. Javi šta si uradio! može i na mail. A mogli bi i da se vidimo neki dan do kraja nedelje pošto ne radim pa da ti bar vratim onaj disk

Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: const array member07.08.2003. u 20:42 - pre 213 meseci
Mrave, ne volim plagijatore. :) Pogledaj kod koji sam poslao coveku u svom odgovoru i ne dupliraj stvari...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
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: const array member07.08.2003. u 21:40 - pre 213 meseci
Eee Leko, ne znaš u kojim sam ja jadan tripovima. Ja tvoj kod uopste nisam konstatovao, pa sam sam došao do istog rešenja (potpuno debilno gubljenje vremena), uostalom naznačio sam u postu da si bio u pravu, kada sam pri kraju njegovog pisanja uočio koji sam mentol |)
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu



+64 Profil

icon Re: const array member08.08.2003. u 06:51 - pre 213 meseci
Hm, da ali to je static, sto sam vec znao da moze ...
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.ec.auckland.ac.nz



+3 Profil

icon Re: const array member08.08.2003. u 06:57 - pre 213 meseci
Pa drugacije ne moze. Mora da bude static. A i da ne mora, zasto bi stavljao da ne bude static? Samo bi zauzimao memoriju bezveze.
 
Odgovor na temu

headstrong
IT Sektor
SCG

Član broj: 5194
Poruke: 40
*.ptt.yu



Profil

icon Re: const array member15.08.2003. u 13:06 - pre 213 meseci
Samo jedno pitanje: "Zasto taj član mora biti const"? Da li postoji neka prednost u tome ili se samo kod "štiti" od zaboravnosti programera (ovo programera se ne odnosi ni na koga posebno već na čitavu branšu).
Kako se od skora bavim C++ i objektnim pristupom programiranju, zanima me da li moderni kompajleri umeju da kada napišemo const, stvarno naprave od toga npr. niz konstanti odn. tabelu u kodnom segmentu, ili se i dalje rezerviše memorijski prostor i niz konstanti inicijalizuje run-time.
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.ppp-bg.sezampro.yu

ICQ: 197419540


Profil

icon Re: const array member15.08.2003. u 16:11 - pre 213 meseci
Modifikator const samo daje do znanja kompajleru da vrednost promenljive ne može da se menja u programu. Teoretski ne moraš da pišeš konst ako vodiš računa o tome da ne promeniš vrednost promenljive, ali nažalost to se nekada dešava i nehatom, tako da const modifikator osigurava da neku vrednost nećeš promeniti negde drugde u kodu ako si zamislio program tako da ona bude konstanta. Primetićeš da pokušaj promene const vrednosti dovodi do greške kompajlera a ne rada programa, u svakom slučaju pisati const kada je to potrebno je sigurno bolji stil nego pokušavati izbeći promenu vrednosti u programu (plus, što je možda i još važnije služi kao dokumentacija za drugog programera koji će čitati tvoj kod).
Tvoje drugo pitanje, nema velike veze sa const modifikatorom, a u stvari se odnosi na dinamički i statički alocirane objekte. Dinamičke alociraš u toku rada programa (veličina memorije koju oni zauzimaju stoga može biti promenljiva). A statički se alociraju jednom kada pokrećeš program i ne mogu se alocirati-dealocirati u toku njegovog rada. Vidi operatore new i delete u bilo kojoj knjizi o c++ da bi ti ovo postalo jasnije. Naravno očigledna je prednost dinamičke alokacije memorije, jedina je mana što dinamička alokacija memorije zahteva malo veći rad (veličinu statičke memorije lako možeš da predvidiš, dok "nestručna" dinamička alokacija memorije može da dovede i do takozvanog curenja (leak) memorije, što je ustvari pojava ne-dealociranja memorije (što je vraća na raspolaganje sistemu, koji je raspodeljuje i na druge programe ili opet na tvoj kod neke nove alokacije) naravno moraju se predvideti i uvesti izuzetci za slučaj da ne postoji dovoljno slobodne memorije za rad programa itd. itd.
Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: const array member15.08.2003. u 21:53 - pre 213 meseci
Citat:
Mrav:
Eee Leko, ne znaš u kojim sam ja jadan tripovima. Ja tvoj kod uopste nisam konstatovao, pa sam sam došao do istog rešenja (potpuno debilno gubljenje vremena), uostalom naznačio sam u postu da si bio u pravu, kada sam pri kraju njegovog pisanja uočio koji sam mentol |)


Aleksandre, ne moraš biti toliko oštar prema sebi, ja sam ono što sam rekao rekao iz zezanja... Mislim... nebitno je da li je neko nešto ponovio, bitno je da smo čoveku dali (valjda) dobre informacije/rešenja... :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
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: const array member16.08.2003. u 15:14 - pre 213 meseci

Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

[es] :: C/C++ programiranje :: const array member

[ Pregleda: 3398 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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