Toon posts:

[C++]Toegang tot array in de constructor

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo ik heb een vraag. Ik moet in een Construtot een array aanmaken. En ik moet met een methode de getallen uit de constructor halen. dit is de code die ik heb
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#ifndef TABEL
#define TABEL

#include <iostream>
using namespace std;

class Tabel
{
private:


public:
    Tabel()
    {
        int afstandTabel[10][10] = {
        { 0 ,   120, 30 , 50 , 60,   90 ,  200 ,  25,  90 ,  230 },
        { 120 , 0 ,  90 , 30 , 145,  198,  150 ,  35,  75 ,  22 },
        { 30 ,  90 , 0 ,  15 , 33 ,  55 ,  65 ,   32,  22 ,  39 },
        { 50 ,  30 , 15 , 0 ,  17 ,  42 ,  33 ,   223, 150,  299 },
        { 60 ,  145, 32 , 17 , 0  ,  155,  133 ,  192, 100,  109 },
        { 90 ,  198, 55 , 42 , 155,  0 ,   112 ,  12,  50 ,  129 },
        { 200 , 150, 65 , 33 , 133,  112,  0 ,    14,  19 ,  26 },
        { 25 ,  35 , 32 , 233, 192,  12,   14 ,   0,   230,  112 },
        { 90 ,  75 , 22 , 150, 100,  50,   19 ,   230, 0 ,   31 },
        { 230 , 22 , 39 , 299, 109,  129,  26 ,   112, 31 ,  0 }};
    }
    int getAfstand(int i, int j);
};


int Tabel::getAfstand(int i, int j) //de i en j zijn de verwijzing naar de getallen
{
    
    //return 2;
}



#endif


Nu had ik array eerst in de getAfstand methode staan maar dat was niet goed want dan moest elke keer als de methode werd aangeroepen de tabel gemaakt worden. En dat was volgens mijn leraar inefficient (lang leve snelle computers) Maar nu krijg ik de getallen er niet meer uit.Nu is mijn vraag hoe kan ik het beste bij die constructor komen kan ik het beste pointers gebruiken

[ Voor 4% gewijzigd door Verwijderd op 24-11-2004 11:08 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Misschien is het handig als je die array niet in je constructor declareert, want dan is de scope van die array beperkt tot de constructor.
Maak die array een member variable van je class.

https://fgheysels.github.io/


Verwijderd

Topicstarter
het probleem is dat ik een java programma moet overnemen in c++ dat is een onze opdracht. En in java heb ik dit
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class AfstandTabel{

 int[][] afstandTabel;


  public AfstandTabel() {
      afstandTabel = new int [][] {
     { 0 ,   120, 30 , 50 , 60,   90 ,  200 ,  25,  90 ,  230 },
     { 120 , 0 ,  90 , 30 , 145,  198,  150 ,  35,  75 ,  22 },
     { 30 ,  90 , 0 ,  15 , 33 ,  55 ,  65 ,   32,  22 ,  39 },
     { 50 ,  30 , 15 , 0 ,  17 ,  42 ,  33 ,   223, 150,  299 },
     { 60 ,  145, 32 , 17 , 0  ,  155,  133 ,  192, 100,  109 },
     { 90 ,  198, 55 , 42 , 155,  0 ,   112 ,  12,  50 ,  129 },
     { 200 , 150, 65 , 33 , 133,  112,  0 ,    14,  19 ,  26 },
     { 25 ,  35 , 32 , 233, 192,  12,   14 ,   0,   230,  112 },
     { 90 ,  75 , 22 , 150, 100,  50,   19 ,   230, 0 ,   31 },
     { 230 , 22 , 39 , 299, 109,  129,  26 ,   112, 31 ,  0 }};

  }

  public int getAfstand(int i, int j)
  {
    int Kmstand = afstandTabel[i][j];
    return Kmstand;
  }

}

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Zie je,
In dat Java programma is je array een member- variable van je class, terwijl dat in je C++ code niet zo is; daar declareer je 'm in je constructor.
Je moet hem dus ook in je c++ prog als member variable van je class declareren, en in je constructor kan je 'm initializeren.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik doe toch bij beide programma's delen hetzelfde of zie ik dat nou verkeerd :? .
In het java programma maak ik em toch ook in de constructor aan

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:59

mulder

ik spuug op het trottoir

Het gaat om het DECLAREREN van de array :)

oogjes open, snaveltjes dicht


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

nee, in je java code staat de definitie van afstandTabel in de class, niet in de constructor.

Daarnaast is dit al eens eerder langs geweest, even zoeken...
.edit: kan 'm niet 1,2,3 vinden, maar deze lijkt er wel verdacht veel op: [rml][ C++] tweevoudig array[/rml]

[ Voor 31% gewijzigd door .oisyn op 24-11-2004 11:24 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Verwijderd schreef op woensdag 24 november 2004 @ 11:17:
ik doe toch bij beide programma's delen hetzelfde of zie ik dat nou verkeerd :? .
In het java programma maak ik em toch ook in de constructor aan
Dat zie je verkeerd.
In je java app, initializeer je 'm in de constructor, maar de definitie staat ergens anders.

https://fgheysels.github.io/


Verwijderd

Topicstarter
oww w8 ik vat em dus in c++ kent ie em alleen in de constructor omdat ie daar alleen aangemaakt word toch ?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je kan er ook gewoon "const static int table[10][10] = {...};" van maken in je getafstand() functie, dan is je performance probleem weg. Maar het is misschien beter om het een member te maken, zodat je later bv je tabel van invoer in kan lezen.

Btw, valt je leraar niet over het gebruik van "using namespace std;" ??

Verwijderd

Topicstarter
Zoijar schreef op woensdag 24 november 2004 @ 11:28:
Je kan er ook gewoon "const static int table[10][10] = {...};" van maken in je getafstand() functie, dan is je performance probleem weg. Maar het is misschien beter om het een member te maken, zodat je later bv je tabel van invoer in kan lezen.

Btw, valt je leraar niet over het gebruik van "using namespace std;" ??
nee daar heeft ie het nog nie over gehad maar waarom is dat fout dan ?/

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Verwijderd schreef op woensdag 24 november 2004 @ 11:36:
nee daar heeft ie het nog nie over gehad maar waarom is dat fout dan ?/
Het is niet echt fout, maar niet netjes. Je haalt nu zeg maar alles van 'std' binnen, en dat kan ooit conflicten geven in grotere programma's.

Dit bv:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

class string {

};

int main(void) {
    string x;
    cout << "done" << endl;
    return 0;
}

Compiled niet, omdat 'string' ambigous is. Als je nu dus die using in je header ergens zet als je bv code schriojft die andere gebruiken; dan kan het gebeuren dat hun code ineens niet meer compiled. Het is wel op te lossen hoor, maar kan voor wat verwarring zorgen.

Misschien was dat niet zo overtuigend, maar bv dit ook:

Stel dat std nou eens een functie max heeft die het tweede argument selecteert van twee getallen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>

namespace std {
    int max(int x, int y) {
        return y;
    }
}

using namespace std;

int main(void) {
    cout << max(2,1) << endl;
    return 0;
}

Dit output, zonder enige warning of error oid, heel braaf "1". Stel je dus voor dat je die code voor max niet ziet, want die zit in een of andere system header.

[ Voor 29% gewijzigd door Zoijar op 24-11-2004 12:22 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
"stel nou" - er is gewoon een std::max(a,b) hoor.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

MSalters schreef op woensdag 24 november 2004 @ 17:22:
"stel nou" - er is gewoon een std::max(a,b) hoor.
Voor zover ik weet selecteert die niet het tweede argument, maar het maximum :) En als het er al is, mag ik het dan niet stellen? Lijkt me juist een realistische stelling :+
Pagina: 1