-
Solving type of class
This is kinda lengthy but I am curious if there is a neat solution to this
I have a class like so
Code:
public abstract class Entity
{
public abstract void Draw(Graphics g);
public static Vector Intersect(Line line1, Line line2)
{
//Do stuff
}
public static Vector Intersect(Arc arc1, Arc arc2)
{
//Do stuff
}
}
Then I have two classes like this
Code:
public class Line : Entity
{
override public void Draw(Graphics g)
{
//Draw stuff
}
}
public class Arc : Entity
{
override public void Draw(Graphics g)
{
//Draw stuff
}
}
I now can do this
Code:
private void MainWin_Paint(e)
{
foreach(Entity entity in m_alVisableEntities)
{
Graphics g = e.Graphics;
entity.Draw(g);
}
}
What happens here is that at run time the program call the correct draw function , either Arc or Line.
But if I try to do this
Code:
vIntersection = Entity.Intersection(m_Entity1, m_Entity2);
where m_Entity1 and m_Entity2 are Entity containg Line instances. I get a compile time error saying something like "cannot convert argument from Entity to Line"
Why is it that in the first case the compiler can solve what type of entity I am calling but not in the second case. And is there a decent way to solve it without manually doing type checking?
Thanks
~Barjor
-
Well, you could make Intersect an abstract function as well like this:
public abstract Vector Intersect( Entity other );
And overwrite this for each derived class, so you can do:
m_Entity1->Intersect( m_Entity2 );
-
What I am trying to do is to create overloaded functions that will take care of intersections between Arcs and line
public Vector Intersect( Line, Line );
public Vector Intersect( Line, Arc );
public Vector Intersect( Arc, Line );
public Vector Intersect( Arc, Arc );
when I call them I would like to just be able to pass them two Entity and have the run time decide what function to call. The problem is that without some sort of type checking I don't know what type (arc or line) that will be passed to the Intersect(XX,XX)
"Quote"
m_Entity1->Intersect( m_Entity2 );
Done to much C++ lately??? *Smile*
Thanks for your help
EDIT
MM maybee I was reading that to fast..you might actually have solved my problem...I think...maybee
THANKS
~Barjor
-
Oops *ggg* yeah, I had to find my way through another projects C++ code all day...