Article View: comp.sys.mac.programmer.codewarrior
Article #4Re: C++ hierarchy problem
From: Justin Vallon
Date: Fri, 04 Aug 1995 04:34
Date: Fri, 04 Aug 1995 04:34
52 lines
1812 bytes
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!userReferences:
<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