SGI C++ 2.0 Polymorphic Reference Bug
Robert Skinner
robert at texas.asd.sgi.com
Wed Mar 13 07:33:59 AEST 1991
In article <1688 at contex.UUCP>, jeff at contex.UUCP (Jeff Carey) writes:
|>
|> I am using:
|>
|> System release: IRIX Release 4D1-3.3.1
|> C++ release: S4-C++-2.0
|> Software Option: C++ Translator Version 2.0
|>
|> on a Silicon Graphics PI.
|> The other day I was testing the code found in the discussion
|> of "Virtual Base Classes with Virtual Functions", section 10.10c, pp. 233-4,
|> of _The_Annotated_C++_Reference_Manual_ and found the following bug. You'll
|> notice that the bug is in the call made to f() from the MW object reference
|> (MW&).
|>
|> ---------------------- beginning of test.c++ code ----------------------------
|>
|> #include <iostream.h>
|>
|> class W { public: virtual void f() { cout << "W::f\n"; } };
|>
|> class MW : public virtual W {};
|>
|> class BW : public virtual W { public: void f() { cout << "BW::f\n"; } };
|>
|> class BMW : public BW, public MW {};
|>
|> main()
|> {
|> BMW bmw;
|>
|> MW* pmw = &bmw;
|> pmw->f();
|>
|> MW& rmw = bmw;
|> rmw.f();
|>
|> return(0);
|> }
|>
|> ----------------------------- end of test code -------------------------------
|>
|> I got this result:
|>
|> $ test
|> BW::f
|> W::f
|>
|> I would have predicted and hoped that the two lines of diagnostics would
|> result in the same text.
|> This is a bug isn't it...polymorphism of this sort should be supported by
|> references as well as pointers, right?!
|>
|> Ouch ---
|> jeff
|> --
|> ------------------------
|> Jeff Carey
|> contex!jeff at uunet.uu.net
no, its not a bug. I'll let one of our compiler wizards explain the
details, but here's my rationalization:
You've declared rmw to be a MW, and the compiler treats it as one,
calling MW::f() directly. (I think of the '&' operator as a
convenience. I really don't know what effect it has here.)
Polymorphism is only supported for pointers, where the compiler doesn't
really know what subclass the pointer really points at.
--
Robert Skinner
robert at sgi.com
Some rich men came and raped the land,
nobody caught 'em.
Put up a bunch of ugly boxes,
and Jesus people bought 'em.
They call it Paradise, I don't know why.
You call someplace Paradise, kiss it goodbye.
- The Eagles
More information about the Comp.sys.sgi
mailing list