[comp.lang.c++] Is this a Turbo C++ bug???

gened@gssc.UUCP (Gene Daniel) (09/06/90)

I think that I have found a bug in Turbo C++. If this has been discussed
here before feel free to ignore this article. The following program calls
a member function in the base class which in turn calls a virtual member
function. With Turbo the virtual function in the base class is called
if the instance is a Base class or a Derived class. With Zortech the virtual 
function in the derived class is called if the instance is a Derived class 
and the function in the base class is called if the instance is a Base class,
which is what I would expect. One interesting item is that if the base class 
is declared as virtual then things seem to work as they as they do in Zortech.

Is this really a bug?? Which compiler got it right???

---------------------------- Cut Here ------------------------------------

#ifdef __ZTC__
#include <stream.hpp>
#else
#include <iostream.h>
#endif

class Base {
   int i;
public:
   Base() {i = 0; }

   virtual void MemberFunc(char *instanceName) { 
       cout << instanceName << ": virtual MemberFunc in Base\n"; 
   }

   void CallMemberFunc(char *instanceName) { MemberFunc(instanceName); }
};

class Derived:  public Base { // change to virtual public Base and it works!!!!
public:
   virtual void MemberFunc(char *instanceName) { 
       cout << instanceName << ": virtual MemberFunc in Derived\n"; 
   }
};

main(int argc, char *argv[])
{
   Derived derived;
   Base base;

   base.CallMemberFunc("base");
   derived.CallMemberFunc("derived");
}

---------------------------------- Cut Here ----------------------------------

The output from Zortech C++ is:

       base: virtual MemberFunc in Base
       derived: virtual MemberFunc in Derived

The output from Turbo C++ is:

       base: virtual MemberFunc in Base
       derived: virtual MemberFunc in Base


-- 
Gene Daniel			   | gened@gss.com
Graphic Software Systems, Inc.     |       or
P.O. Box 4900                      | ..!tektronix!sequent!gssc!gened
Beaverton, Oregon 97005-7161       |

beard@ux5.lbl.gov (Patrick C Beard) (09/16/90)

In article <6322@gssc.UUCP> gened@gssc.UUCP (Gene Daniel) writes:
#
#I think that I have found a bug in Turbo C++.
#The following program calls
#a member function in the base class which in turn calls a virtual member
#function. With Turbo the virtual function in the base class is called
#if the instance is a Base class or a Derived class. With Zortech the virtual 
#function in the derived class is called if the instance is a Derived class 
#and the function in the base class is called if the instance is a Base class,
#which is what I would expect. One interesting item is that if the base class 
#is declared as virtual then things seem to work as they as they do in Zortech.
#
#Is this really a bug?? Which compiler got it right???

I believe it is a bug.  I've tried your program on a Mac IIfx with MPW C++
3.1b4 and it behaves as you describe Zortech does.

--
-------------------------------------------------------------------------------
-  Patrick Beard, Macintosh Programmer                        (beard@lbl.gov) -
-  Berkeley Systems, Inc.  ".......<dead air>.......Good day!" - Paul Harvey  -
-------------------------------------------------------------------------------