Re: child class as argument?
mwebel@freenet.de wrote:
Hi,
i have another problem:
i have a container basis class and want to write a virtual "copyFrom()"
function.
Basically the child class should copy from another child class.
************************
class Basis{
public:
virtual void copyfrom(basis & obj)=0;
}
class Child: public Basis{
public:
int x;
void copyfrom(Basis & obj){
//Problem is Basis has no element "x"!!
x=obj.x;
};
}
************************
(i know x should not be public... just to lazy to write getter)
First of all, it's not necessary for a member function, and second it
took just as long to write your disclaimer. ;-)
thing is:
how can i write the basis class already so that it'll accept the future
child of it as an argument?
or is it not a problem? can i just do it?
thanks for any answers...
What you are asking doesn't make a lot of sense to me. Consider this:
class Shape
{
public:
virtual void CopyFrom( const Shape& ) = 0;
};
class Circle : public Shape
{
int radius_;
public:
virtual void CopyFrom( const Shape& );
};
class Polygon : public Shape
{
int sides_, height_;
public:
virtual void CopyFrom( const Shape& );
};
How do you propose to have a circle copy from a polygon when their
implementations are different even in terms of the number and semantic
meaning of their data members? If they were more similar, you could
either move their similarities into the base class or insert an
intermediate base class with their shared properties (which would allow
for other Shapes that don't share in those properties).
You might be seeking the Visitor design pattern.
Cheers! --M