Re: Derived class & Function pointer
On Sep 14, 7:25 pm, "Bo Persson" <b...@gmb.dk> wrote:
mast4as wrote:
Hi everyone
I have a problem that many people probably came across before but I
didn't find an answer on the net yet ...
I have a base class Bass and 2 derived class DerivedA & DerivedB. I
can create an new instance of the DeriveA class but then need to
call a method of the DerivedB class to save the data of the base
class into a specific file format. So I thought of using function
pointer but can seem to figure it out:
class Base
{
public:
float *data;
Base() { data = new float[10]; }
~Base() { delete [] data; }
virtual void SaveFormat() = 0;
}
class DerivedA : public Base
{
public:
void SaveFormat() { // save data in file format A }
}
class DerivedB : public Base
{
public:
void SaveFormat() { // save data in file format B }
}
int main()
{
Base *derivedA = new Derived A;
// now I want to save the data hold in derivedA but by using
SaveFormat from DerivedB ???
????
// this is where I am lost... I tried
void (Base::*SaveFormatPtrFunc)() = &DerivedB::SaveFormat;
derivedA->*SaveFormatPtrFunc();
// but that doesn't compile ;-(
}
Does anybody know what's the best way of doing this ?
Not this way for sure. :-)
If you want different ways to save the data, without the format being
tied to the actual type of the objects, why make them members in the
first place?
What about a couple of free functions?
void SaveFormatA(const Base&);
void SaveFormatB(const Base&);
If you still need the virtual functions for a default save format,
these can call the free function of their choice, like
void DerivedA::SaveFormat()
{ SaveFormatA(*this); }
Bo Persson
Thanks everyone for your answer. Well I agree the design was ugly
which why I hoped you could give me some better ways of doing this ;-)
I made the Save method part of the class because each class uses
different ways of encoding the data and therefore I have also methods
in each of these classes that allow me to compress/decompress the data
according to the file format description.
The code from Victor obviously works fine but the DerivedA/B classes
don't only have methods to save the data, but of course also to read
the files and store the data into m_data from the base class (or
something of that kind). I also wanted to avoid having to create Temp
instances (such as in the example given by Victor where you need to
create sa sb).
Anyway I will digest some of the things you said and will go with a
simpler solution.
Thanks for your help -c