Witam,
Ostatnio bawiłem się wskaźnikami na metody w klasie. Stworzyłem tablicę zawierającą wskaźniki do czterech metod. Finalnie z zewnątrz udało mi się wywołać każdą z metod dla obiektu tej klasy, jednak sposób w jaki tego dokonałem jest dość dziwny. Czy nie dało by się tego jakoś ładniej wykonać bez użycia aż tylko * ?
Plik nagłówkowy.
#pragma once
class moja_klasa;
typedef double (moja_klasa::*wf)();
class moja_klasa
{
public:
double a,b;
wf tab[4];
moja_klasa(double a,double b);
double f1();
double f2();
double f3();
double f4();
};
Plik źródłowy
#include "moja_klasa.h"
moja_klasa::moja_klasa(double a,double b)
{
this->a=a;
this->b=b;
tab[0]=&moja_klasa::f1;
tab[1]=&moja_klasa::f2;
tab[2]=&moja_klasa::f3;
tab[3]=&moja_klasa::f4;
}
double moja_klasa::f1()
{
return a+b;
}
double moja_klasa::f2()
{
return a-b;
}
double moja_klasa::f3()
{
return a*b;
}
double moja_klasa::f4()
{
return a/b;
}
funkcja główna:
#include <iostream>
#include "moja_klasa.h"
using namespace std;
int main()
{
moja_klasa moja(3,9);
for(int i=0;i<4;i++)
{
cout<<(moja.**(moja.tab+i))()<<endl;
}
cout<<moja.f1();
return 0;
}
Moje pytanie dotyczy tej linii:
cout<<(moja.**(moja.tab+i))()<<endl;