Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Pana_Ruplahlava 11 Listopadu 2011, 21:29:53
-
Ahoj,
tak toršku začínám v céčku a nějak jsem nepřišel na to, jak v konstruktoru třídy deklarovat pole...
např:
class Bobek{
private:
int m_cesta[4];
public:
Bobek(int cesta [4]){
m_cesta = cesta;
}
};
tohle nejede, myslel jsem že bych to udělal Bobek*bob = new Bobek({0,1,2,3}) ale to neprojde :)
jak na to, je na to nějakej fígl? v objektovým programování začínám.. :)
-
Ahoj,
tak toršku začínám v céčku a nějak jsem nepřišel na to, jak v konstruktoru třídy deklarovat pole...
např:
class Bobek{
private:
int m_cesta[4];
public:
Bobek(int cesta [4]){
m_cesta = cesta;
}
};
tohle nejede, myslel jsem že bych to udělal Bobek*bob = new Bobek({0,1,2,3}) ale to neprojde :)
jak na to, je na to nějakej fígl? v objektovým programování začínám.. :)
ja bych udelal Bobek(int * cesta, int size){
int i;
for (i=0;i<size;i++){
m_cesta[i] = cesta[i];
}
}
EDIT: m_cesta bych alokoval dynamicky podle velikosti size
-
to já bych udělal
class Bobek {
private:
int* m_pole;
public:
Bobek(int* pole) {
m_pole = pole;
}
};
int main() {
Bobek* bob = new Bobek(new int [4] {1, 2, 3, 4});
}
-
#include <algorithm>
/* .... */
class Bobek {
private:
int * m_cesta;
public:
Bobek(int * cesta) {
m_cesta = new int[4];
copy(cesta, cesta + 4, m_cesta);
}
};
Ale radšej odporúčam niečo takéto, ak je nutné dynamické pole:
#include <vector> /* alebo list */
#include <algorithm>
/* ... */
class Bobek {
private:
vector<int> v_cesta;
public:
Bobek(int * cesta) {
v_cesta.resize(4);
copy(cesta, cesta + 4, v_cesta.begin());
}
};
-
no já si zkouším udělat textovku, a jediný co bych potřeboval je, aby se tam dostala hodnota 0 či 1. tomu poslednímu zápisu ještě nerozumím, ale to co psal pacholík asi bude to pravé co potřebuju :)
Díky :)
-
Tak přes ten vector co píše YaD bych se vyhnul. Jednat ten zápis je v takto jednoduché záležitosti děsně složitý, jednak je fixnutá délka na velikost 4. Nejlepší je si předávat ukazatelem a v třídě si to nechat jako ukazatel a tak s tím dál pracovat, přesně jak píše pacholik. Jelikož v konstruktoru použil rovnou new a dál ukazatel v inicializačním souboru třídy Bobek zahodil, tak ho má již jen v třídě Bobek. Záleží na situaci, ale pro nastínění pro Vás je to Ok. Takže vectoru takhle jak se zapsaný bych se fakt vyhnul. Vector je dobrej, ale zas bych si do něj zapsal jen ukazatel a nekopíroval hodnoty do jednotlivých intů.
-
Tak přes ten vector co píše YaD bych se vyhnul. Jednat ten zápis je v takto jednoduché záležitosti děsně složitý, jednak je fixnutá délka na velikost 4. Nejlepší je si předávat ukazatelem a v třídě si to nechat jako ukazatel a tak s tím dál pracovat, přesně jak píše pacholik. Jelikož v konstruktoru použil rovnou new a dál ukazatel v inicializačním souboru třídy Bobek zahodil, tak ho má již jen v třídě Bobek. Záleží na situaci, ale pro nastínění pro Vás je to Ok. Takže vectoru takhle jak se zapsaný bych se fakt vyhnul. Vector je dobrej, ale zas bych si do něj zapsal jen ukazatel a nekopíroval hodnoty do jednotlivých intů.
Zmeniť veľkosť vektoru nie je až také ťažké.
A pokiaľ sa jedná o maximalnú elegenciu:
Bobek (int * cesta, int size) {
v_cesta.insert(v_cesta.begin(), cesta, cesta + size);
}
-
Tak přes ten vector co píše YaD bych se vyhnul. Jednat ten zápis je v takto jednoduché záležitosti děsně složitý, jednak je fixnutá délka na velikost 4. Nejlepší je si předávat ukazatelem a v třídě si to nechat jako ukazatel a tak s tím dál pracovat, přesně jak píše pacholik. Jelikož v konstruktoru použil rovnou new a dál ukazatel v inicializačním souboru třídy Bobek zahodil, tak ho má již jen v třídě Bobek. Záleží na situaci, ale pro nastínění pro Vás je to Ok. Takže vectoru takhle jak se zapsaný bych se fakt vyhnul. Vector je dobrej, ale zas bych si do něj zapsal jen ukazatel a nekopíroval hodnoty do jednotlivých intů.
Zmeniť veľkosť vektoru nie je až také ťažké.
A pokiaľ sa jedná o maximalnú elegenciu:
Bobek (int * cesta, int size) {
v_cesta.insert(v_cesta.begin(), cesta, cesta + size);
}
Nesmíš pak udělat toto Bobek* bob = new Bobek(new int [4] {1, 2, 3, 4}); !
-
Pravda. Len teraz neviem o čo ide... :/
Tak snáď autor vie z toho, čo sa naučil, že treba potom len prirobiť ďalšie číslo a obsluhovať to dokáže kde čo.
Hádať sa nechcem. Skôr by sme sa mali opýtať na čo potrebuje deklarovať pole vo volaní. Nezdá sa mi príliš praktické vytvoriť pole a hodiť ho ďalej, ak predpokladáme, že si trieda z prstu vycucia ako s tým makať (ide to, ale sme syntakticky viazaný, takže človek pozabudne a hneď je problém). Obidvaja tu prezentujeme nejaký prístup, ale dosť odlišný...
Preto by sme sa radšej mali autora spýtať, čo chce robiť.
-
delam textovku... tohle pole potrebuju na to aby mi objekt Misto mohl rict kam postava muze jit, a to na sever jih vychod zapad. pole muze nabyvat delky 4 hodnot a to pouze 0 nebo 1 :) nic sloziteho :)
s temi vektory vubec nevim o co jde :D
-
Potom nič. Keďže môj prístup je príliš "zapúzdrovací" na niečo takéto.
-
pole muze nabyvat prave 4 hodnoty a to pouze 0 nebo 1
0 nebo 1 jsou dvě hodnoty ??? ::)
-
sakra sem to dodrbal, opraveno :D