Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: array tridy a c++  (Přečteno 2110 krát)

Pana_Ruplahlava

  • Člen
  • **
  • Příspěvků: 172
    • Zobrazit profil
array tridy a c++
« kdy: 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ř:

Kód: [Vybrat]
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.. :)
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Šuohob

  • Závislák
  • ****
  • Příspěvků: 2171
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #1 kdy: 11 Listopadu 2011, 21:42:56 »
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ř:

Kód: [Vybrat]
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
Kód: [Vybrat]
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
Tak dlouho se vrzá s Acerem, až se displej utrhne.

pacholik

  • Závislák
  • ****
  • Příspěvků: 2072
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #2 kdy: 11 Listopadu 2011, 22:17:58 »
to já bych udělal
Kód: [Vybrat]
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});
}

YaD

  • Návštěvník
  • *
  • Příspěvků: 69
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #3 kdy: 12 Listopadu 2011, 00:26:21 »
Kód: [Vybrat]
#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:
Kód: [Vybrat]
#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());
}
};

Pana_Ruplahlava

  • Člen
  • **
  • Příspěvků: 172
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #4 kdy: 12 Listopadu 2011, 08:41:04 »
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 :)
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Martin - ViPEr*CZ*

Re:array tridy a c++
« Odpověď #5 kdy: 12 Listopadu 2011, 12:46:39 »
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ů.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

YaD

  • Návštěvník
  • *
  • Příspěvků: 69
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #6 kdy: 12 Listopadu 2011, 13:54:39 »
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:
Kód: [Vybrat]
Bobek (int * cesta, int size) {
v_cesta.insert(v_cesta.begin(), cesta, cesta + size);
}

Martin - ViPEr*CZ*

Re:array tridy a c++
« Odpověď #7 kdy: 12 Listopadu 2011, 15:07:43 »
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:
Kód: [Vybrat]
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}); !
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

YaD

  • Návštěvník
  • *
  • Příspěvků: 69
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #8 kdy: 12 Listopadu 2011, 21:08:30 »
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ť.

Pana_Ruplahlava

  • Člen
  • **
  • Příspěvků: 172
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #9 kdy: 12 Listopadu 2011, 21:15:07 »
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
« Poslední změna: 13 Listopadu 2011, 17:12:54 od Pana_Ruplahlava »
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

YaD

  • Návštěvník
  • *
  • Příspěvků: 69
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #10 kdy: 12 Listopadu 2011, 21:33:30 »
Potom nič. Keďže môj prístup je príliš "zapúzdrovací" na niečo takéto.

Martin - ViPEr*CZ*

Re:array tridy a c++
« Odpověď #11 kdy: 13 Listopadu 2011, 15:36:02 »
Citace
pole muze nabyvat prave 4 hodnoty a to pouze 0 nebo 1
0 nebo 1 jsou dvě hodnoty ??? ::)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Pana_Ruplahlava

  • Člen
  • **
  • Příspěvků: 172
    • Zobrazit profil
Re:array tridy a c++
« Odpověď #12 kdy: 13 Listopadu 2011, 17:12:17 »
sakra sem to dodrbal, opraveno :D
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

 


Provoz zaštiťuje spolek OpenAlt.