🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sys.mac.programmer.codewarrior
Article #4

Re: C++ hierarchy problem

#4
From: Justin Vallon
Date: Fri, 04 Aug 1995 04:34
52 lines
1812 bytes
In article <3vqr6h$8nj@imag.imag.fr>, Gilles Serasset
<Gilles.Serasset@imag.fr> wrote:

>Hi all,
>
...
>B3 inherits from B2 and redefines DoThat().
...
>When I call A2::DoThis(), B2::DoThat() is called because of the casting.
>And I would like B3::DoThat() to be called instead.
>
>How can I do this ? Am I missing something in C++ hierarchies principles ?

If you want B3::DoThat() to 'override' B2::DoThat(), then declare DoThat
as virtual.

class B2 : public B1 {
   ...
   virtual void DoThat(void);
   ...
};

class B3 : public B2 {
   ...
   virtual void DoThat(void);
   ...
};

Now, when you have a B3 being pointed to by a B2 *, B3::DoThat is called.

void foo(void) {
   B2 *pb2 = new B3;
   pb2->DoThat();  /* Calls B3::DoThat(), since pb2 is 'really' a B3.  */
};

It seems like you will need the cast in A2, unless you could declare
virtual DoThat in B1, and then A1 or A2 would be able to call
bb->DoThat(), since B1::DoThat() is virtual and defined in B1.

>
>Thanks in advance,
>
>Gilles Serasset,
>
>======================================================
> Au paradis, on est assis a la droite de Dieu.
> C'est normal, c'est la place du mort.    P. Desproges
>-----  Gilles.Serasset@imag.fr (Gilles Serasset)  ----
>GETA IMAG, UJF et CNRS, BP 53 F-38041 GRENOBLE CEDEX 9

-Justin
jcv6@columbia.edu
Technical Details
Message-ID: <jcv6-0408950034570001@dialup168.cc.columbia.edu>
Path: arc1-ca.pugleaf.net!dialup168.cc.columbia.edu!user
References: <3vqr6h$8nj@imag.imag.fr>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!dialup168.cc.columbia.edu!user
From: jcv6@columbia.edu (Justin Vallon)
Newsgroups: comp.sys.mac.programmer.codewarrior,comp.sys.mac.oop.misc,comp.lang.c++
Subject: Re: C++ hierarchy problem
Date: Fri, 04 Aug 1995 00:34:57 -0400
Organization: Columbia University
Distribution: world
Message-ID: <jcv6-0408950034570001@dialup168.cc.columbia.edu>
References: <3vqr6h$8nj@imag.imag.fr>
NNTP-Posting-Host: dialup168.cc.columbia.edu