Hej!
Z czysto ambicjonalnych pobudek chciałbym sobie poradzić z następującym problemem. Mam klasę abstrakcyjną ALG, po której dziedziczą P i IS. Klasa ALG potrzebuję, by zawierała wskaźnik na którąś ze swoich niestatycznych metod. Generalnie działa to tak, że użytkownik wybiera formę wprowadzania danych do tablicy (ręcznie, z pliku, losowo) a następnie switchem znajdującym się w main() chciałbym wykonywać coś w stylu
obiekt->akcja = obiekt->getFromUser();
na różne metody.
następnie uruchomiena chciałbym żeby została ta metoda z run() w klasie IS() lub P():
public run() {
akcja();
posortuj();
printWyniki();
}
Mam nadzieję, że do tej pory jasne. Wiem, że mozna prosciej (np. chcialem umiescic switcha w klasie i przekazywac tam wynik wyboru uzytkownika, ale to wydaje mi sie prostackie), ale jak juz mowilem, chcialbym się i tego nauczyc. Do tej pory kod jaki stworzyłem i nie bardzo mi działa:
typedef void (ALG::* wskMetoda)();
class ALG {
public:
wskMetoda Akcja;
void generateRandomData(){}
void getFile() {}
void getFromUser() {}
void printResults() { }
};
class P : public ALG {
public:
void run() {
Akcja();
wyniki[a]=partition(0,rozmiar-2);
printResults();
}
int partition(int lewa, int prawa){}
};
class IS : public ALG {
public:
int sort() { }
void run() {
akcja();
wyniki[a]=sort();
printResults();
}
};
int _tmain(int argc, _TCHAR* argv[]){
scanf("%d",wybor);
switch(wybor) {
case 1:
obiekt->akcja = obiekt->getFromUser();
break;
case 2:
obiekt->akcja = obiekt->generateRandomData();
break;
case 3:
obiekt->akcja = obiekt->setData(tab);
break;
case 4:
obiekt->akcja = obiekt->getFile();
break;
}
obiekt->run();
}
Oczywiście ten kod nie ruszy, mocno go okroiłem, chodzi mi raczej o zaprezentowanie mniej więcej struktury programu. Bardzo byłbym wdzięczny osobom, które są w stanie mi pomóc z nauczenie się jak konstruować i posługiwać się pointer to nonstatic member ;) Niestety wszystkie przykłady które sa na google albo są bez użycia klas, albo nie ma do nich dostępu z zewnątrz. No chyba, że jestem ślepy i nic nie widzę (w cpp próbuję sił od paru miesięcy dopiero). Z góry dzięki!!!!!!!