16. april 2004 - 14:26Der er
19 kommentarer og 1 løsning
indsæt objekt i array
Et rigtigt begynder-spørgsmål, der reelt kun går på hvordan man indsætter et objekt i et array.
Jeg har et par klasser - Rektangel og Cirkel, der begge bedarver fra en abstrakt Figur klasse. Derudover har jeg lavet en Tabel-klasse, der reelt kun udgør et enkelt array af typen Firgur, tab[8][8]. Nu vil jeg så gerne (fra min main) kunne kalde Tabel-klassens insert-metode, og indsætte henholdsvis Cirkel- og Rektangel-objekter i min tabel.
min tabel er erklæret med (tabel.h): Figur tab[8][8];
Jeg havde tænkt lidt på at lave en min insert alá (tabel.cpp): void Tabel::insert(int x, int y, Figur &f) { this->tab[x][y] = &f; }
og så kalde den med f.eks.: Figur *f = new Cirkel(); int i = 0, j = 0; insert(i,j, f) ;
hmm.... vent nu lige lidt. Grunden til at den går kold, skyldes nok at jeg kalder insert() fra en anden metode i Tabel-klassen, hvor jeg parameter-overfører et array.
Jeg har nemlig lavet fill() metode, der automatisk skal indsætte henholdsvis Cirkel- og Rektangel-objekter i tabellen.
void Tabel::fillTabel(Figur *figurArray[2]) { int x;
// srand(seed): Sets a random starting point. srand( (unsigned)time(NULL) );
Lige et sidste (par) spørgsmål: Hvordan får jeg typecastet mine "Figur" pointere, når jeg løber min tabel igennem, så jeg kan få kaldt Cirkel-klassens 'getAreal()' metode på Cirkel-objekterne og Rektangel-klassens getAreal() på mine Rektangel-objekter...
int main() { int i = 123; string s = "abc"; MyClass *mc = new MyClass(); MySubClass *msc = new MySubClass(); MyClass *mcmsc = new MySubClass(); cout << typeid(i).name() << endl; cout << typeid(s).name() << endl; cout << typeid(mc).name() << endl; cout << typeid(msc).name() << endl; cout << typeid(mcmsc).name() << endl; cout << typeid(*mc).name() << endl; cout << typeid(*msc).name() << endl; cout << typeid(*mcmsc).name() << endl; return 0; }
GCC 3.1/mingw output:
i Ss P7MyClass P10MySubClass P7MyClass 7MyClass 10MySubClass 7MyClass
MS VC++ 6:
int class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>> class MyClass * class MySubClass * class MyClass * class MyClass class MySubClass class MyClass
Jeg havde også forventet at den ville være klog nok til at fortælle at mcmsc i virkeligheden peger på en MySubClass, det andet er med til at gøre det endnu mere ubrugeligt i praksis.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.