From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Martin v. Loewis" To: CHRISTIANII@prodigy.net Cc: egcs-bugs@egcs.cygnus.com Subject: Re: Is this a bug? Date: Tue, 11 May 1999 23:44:00 -0000 Message-id: <199905120641.IAA00487@mira.isdn.cs.tu-berlin.de> References: <000501be9c2c$c17c5e80$e712fdd1@john> <000501be9c2c$c17c5e80$e712fdd1@john> X-SW-Source: 1999-05/msg00233.html List-Id: > Shouldn't it call Object::render(float, float, float)? Instead, > Triangle::render() overrides it! No. Triangle::render does not override Object::render, it *hides* Object::render. Stroustrup decided that if introduce a method in a derived class, it might be confusing if a base method with the same name would be called just because overload resolution finds it a better method. One way to get around this is Triangle t; Object *o = &t; o->render(0, 0, -5); Triangle t; t.render(0, 0, -5); Another way would be a using declaration: class Triangle { float v[3][3]; public: virtual void move(float x, float y, float z); using Object::render; virtual void render(); }; Unfortunately, g++ currently rejects such code. Please read your C++ book on inheritance and overloading. Regards, Martin