#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
struct TData
{
float fWeight;
float fLength;
};
typedef float (TData::*TDataFloatPointer); // pointer to member
float CalcAverage(const TData* pArray, int iSize, TDataFloatPointer p)
{
float fAverage = 0;
for(int i = 0; i < iSize; ++i)
{
float f = pArray->*p; // derefernce through the pointer to member
fAverage += f;
++pArray;
}
return fAverage/iSize;
}
void PrintArrayData(const TData* pArray, int iSize, TDataFloatPointer p)
{
float fAverage = CalcAverage(pArray, iSize, p);
for(int i = 0; i < iSize; ++i)
cout << pArray++->*p << endl;
cout << "Average:" << endl << fAverage << endl;
}
int main()
{
const TData vData[] =
{
{ 1.0f, 10.0f },
{ 2, 9 },
{ 3, 8 },
{ 4, 7 },
{ 5, 6 },
{ 6, 5 },
{ 7, 4 },
{ 8, 3 },
{ 9, 2 },
{ 10, 1 }
};
const NUM_DATA = sizeof(vData)/sizeof(vData[0]);
cout << "Weights:" << endl;
PrintArrayData(vData, NUM_DATA, &TData::fWeight); // get the pointer to member
cout << "Length:" << endl;
PrintArrayData(vData, NUM_DATA, &TData::fLength);
getch();
}