Kan man anvende templates inde i en klasseerklæring/-implementering? Har siddet og fedtet med flg. kode:
#include <iostream.h>
class Find { private: int antal; public: Find(): antal(0){} int findIndex(T arr[], int n, long konto_nr); };
template <class T> int Find::findIndex(T arr[], int n, long konto_nr) { int index=0; while(konto_nr!=arr[index] && (index < n)) { index++; } if(index==n) {return -1;} else {return index;} }
const int MAX_ANTAL_KONTI=5;
int main() { int konti[MAX_ANTAL_KONTI]={4,54,465,4,9}; Find obj; //find plads af 54 cout << "Index plads er "; cout << obj.findIndex(konti, 5,54) << endl; return 0; }
template <typename T> class Find { private: int antal; public: Find(): antal(0){} int findIndex(T arr[], int n, long konto_nr); };
class Find2 { private: int antal; public: Find2(): antal(0){} template <typename T> int findIndex(T arr[], int n, long konto_nr); };
template <typename T> int Find<T>::findIndex(T arr[], int n, long konto_nr) { int index=0; while(konto_nr!=arr[index] && (index < n)) { index++; } if(index == n) { return -1; } else { return index; } }
template<typename T> int Find2::findIndex(T arr[], int n, long konto_nr) { int index=0; while(konto_nr!=arr[index] && (index < n)) { index++; } if(index == n) { return -1; } else { return index; } }
const int MAX_ANTAL_KONTI = 5;
int main() { int konti[MAX_ANTAL_KONTI]={4,54,465,4,9}; Find<int> obj; std::cout << "Index plads er "; std::cout << obj.findIndex(konti, 5, 54) << std::endl;
Jeg har 4 arrays med 4 forskellige objekter. Alle objekter har dog disse attributter til fælles: kunde_nr og saldo. Hver kunde kan godt have oprettet flere objekter med tilhørende saldoer (saldi?).
Nu vil jeg gerne lave en søgealgoritme som gennemløber alle arrays og lægger saldoerne sammen for hver kunde og tester om beløbet er større end fx. 20000. Hvis det er det, skal kunden udskrives.
Hvordan løses det problem mest elegant? Kunne rekursion være en mulighed? Hilsen G
class Base { public: Base(int k, double s) : Kunde(k), Saldo(s) { } int Kunde; double Saldo; };
class Sub1 : public Base { public: Sub1(int k, double s) : Base(k, s) {} };
class Sub2 : public Base { public: Sub2(int k, double s) : Base(k, s) {} }; class Sub3 : public Base { public: Sub3(int k, double s) : Base(k, s) {}
}; class Sub4 : public Base { public: Sub4(int k, double s) : Base(k, s) {} };
int main() { Base *Ar[4][5];
Ar[0][0] = new Sub1(0, 11.12); Ar[0][1] = new Sub1(0, 12.12); Ar[0][2] = new Sub1(1, 23.23); Ar[0][3] = new Sub1(2, 44.44); Ar[0][4] = new Sub1(0, 44.44);
Ar[1][0] = new Sub2(0, 2.12); Ar[1][1] = new Sub2(0, 52.12); Ar[1][2] = new Sub2(1, 63.23); Ar[1][3] = new Sub2(2, 74.44); Ar[1][4] = new Sub2(0, 84.44);
Ar[2][0] = new Sub3(0, 2.12); Ar[2][1] = new Sub3(0, 72.12); Ar[2][2] = new Sub3(1, 73.23); Ar[2][3] = new Sub3(2, 74.44); Ar[2][4] = new Sub3(0, 47.44);
Ar[3][0] = new Sub4(0, 2.12); Ar[3][1] = new Sub4(0, 92.12); Ar[3][2] = new Sub4(1, 93.23); Ar[3][3] = new Sub4(2, 94.44); Ar[3][4] = new Sub4(0, 97.44);
for(int i = 0; i < 3; i++) // For each user { double sum = 0; for(int a = 0; a < 4; a++) // For each type { for(int b = 0; b < 5; b++) // For each elemet in the array { if(Ar[a][b]->Kunde == i) sum += Ar[a][b]->Saldo; } } std::cout << "Kunde: " << i << ", Saldo: " << sum << std::endl; } for(int a = 0; a < 4; a++) // For each type for(int b = 0; b < 5; b++) // For each elemet in the array delete Ar[a][b]; } </code>
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.