Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #80639

Re: dynamic_cast

Subject Re: dynamic_cast
Newsgroups comp.lang.c++
References (1 earlier) <sbbr3u$a3j$1@dont-email.me> <sbl7mh$kb5$1@dont-email.me> <sbpm58$tfv$1@dont-email.me> <oMZDI.15364$SA.31@fx39.iad> <sbpq4k$ql6$1@dont-email.me>
From Richard Damon <Richard@Damon-Family.org>
Message-ID <j3_DI.7823$en4.873@fx34.iad> (permalink)
Organization Forte - www.forteinc.com
Date 2021-07-03 09:59 -0400

Show all headers | View raw


On 7/3/21 9:53 AM, Bonita Montero wrote:
>>> Using dynamic_cast instead of a virtual function call is bad coding.
> 
>> Incorrect, often to add the virtual function call to get around the need
>> for the dynamic_cast requires injecting into a class concepts that it
>> should not be dealing with.
> 
> If you're doing a dynamic_cast you're switching upon the type of the
> class. This switching should be better done inside the class with class
> -dependent code - with a virtual function call.

Wrong. Application level logic should stay in the application level
code. That is the only scalable option.

> 
>> As an example, say you have a collection of animals, and you want to
>> extract all the dogs out of it. You could add to Animal and Dog an isDog
>> function, (and then need to change Animal again for each new type of
>> thing you might want get, lousy encapsulation) or you can use a
>> dynamic_cast to check if this animal is a Dog.
> 
> the isDog-function would be faster.
> 

But then  it also needs isCat, isHorse, isSnake, isMammel, isReptile,
and so on.

The virtual function method says that you need to change Animal EVERY
TIME you define a new type of animal for the system. This breaks
encapsulation, and binary compatibility, as adding a virtual function to
the base class changes the definition of EVERY subclass to that class.

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

dynamic_cast Mr Flibble <flibble@reddwarf.jmc> - 2021-06-27 22:51 +0100
  Re: dynamic_cast Öö Tiib <ootiib@hot.ee> - 2021-06-27 15:01 -0700
  Re: dynamic_cast Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-06-27 22:30 +0000
  Re: dynamic_cast "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-06-27 16:35 -0700
  Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-06-28 08:44 +0200
    Re: dynamic_cast Vir Campestris <vir.campestris@invalid.invalid> - 2021-07-01 21:14 +0100
      Re: dynamic_cast Öö Tiib <ootiib@hot.ee> - 2021-07-01 14:16 -0700
      Re: dynamic_cast red floyd <no.spam.here@its.invalid> - 2021-07-01 17:48 -0700
      Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-07-03 14:45 +0200
        Re: dynamic_cast Richard Damon <Richard@Damon-Family.org> - 2021-07-03 09:39 -0400
          Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-07-03 15:53 +0200
            Re: dynamic_cast Richard Damon <Richard@Damon-Family.org> - 2021-07-03 09:59 -0400
              Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-07-03 17:01 +0200
                Re: dynamic_cast Richard Damon <Richard@Damon-Family.org> - 2021-07-03 11:42 -0400
                Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-07-03 18:04 +0200
                Re: dynamic_cast Richard Damon <Richard@Damon-Family.org> - 2021-07-03 13:59 -0400
                Re: dynamic_cast Mr Flibble <flibble@reddwarf.jmc> - 2021-07-03 20:06 +0100
                Re: dynamic_cast Bonita Montero <Bonita.Montero@gmail.com> - 2021-07-04 07:06 +0200
                Re: dynamic_cast Richard Damon <Richard@Damon-Family.org> - 2021-07-03 14:03 -0400
                Re: dynamic_cast Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-08-07 13:06 -0700

csiph-web