Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.iso-c++ > #2154

Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden

Path csiph.com!news.mixmin.net!eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From Stefan Reuther <stefan.news@arcor.de>
Newsgroups de.comp.lang.iso-c++
Subject Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden
Date Fri, 9 Sep 2022 17:47:27 +0200
Organization A noiseless patient Spider
Lines 36
Sender "Moderation de.comp.lang.iso-c++" <dclisocpp+mod@elaboris.de>
Approved Markus Schaaf <dclisocpp+mod@elaboris.de>
Message-ID <tffu7g.4vc.1@stefan.msgid.phost.de> (permalink)
References <tfdr4a$123lk$1@tota-refugium.de>
MIME-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
Injection-Info reader01.eternal-september.org; posting-host="f5db78fa4d1732b4083dea5948bbaf05"; logging-data="1169212"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+BPx9PkxJ/4soLRKkz/Q/N"
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 Hamster/2.1.0.1538
Xref csiph.com de.comp.lang.iso-c++:2154

Show key headers only | View raw


Am 09.09.2022 um 00:42 schrieb Michael Landenberger:
> Wie kann ich es erreichen, dass beim Aufruf des
> Konstruktors von CBase über den Konstruktor eines Objekts der Klasse CDerived
> *nicht* CBase::getName(), sondern CDerived::getName() aufgerufen wird?

Gar nicht, da das CBase-Objekt zu dem Zeitpunkt noch nicht weiß, dass es
mal ein CDerived werden wird.

Eine Möglichkeit wäre, die Klassenstruktur derart zu gestalten, dass
CBase ein pur virtuelles Interface ohne Logik ist, und die Logik in
einer weiteren Klasse liegt:

    class CBase {
     public:
        virtual string getName() = 0;
    };
    class CDerived : public CBase {
     public:
        string getName() override { return "abgeleitete Klasse"; }
    };

    class CLogic {
     public:
        CLogic(std::unique_ptr<CBase> pImpl)
            : m_pImpl(std::move(pImpl))
        { m_name = m_pImpl->getName(); }
     private:
        std::unique_ptr<CBase> m_pImpl;
        string m_name;
    };

Dann ist das CDerived garantiert schon fertig, wenn die Konstruktion des
CLogic beginnt.


  Stefan

Back to de.comp.lang.iso-c++ | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Eigenartiges Verhalten von überschriebenen virtuellen Methoden "Michael Landenberger" <spamwirdgefiltert@web.de> - 2022-09-09 00:42 +0200
  Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Stefan Reuther <stefan.news@arcor.de> - 2022-09-09 17:47 +0200
    Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden "Michael Landenberger" <spamwirdgefiltert@web.de> - 2022-09-09 22:46 +0200
      Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden paule32 <paule32.jk@gmail.com> - 2022-09-10 09:09 +0200
      Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Stefan Reuther <stefan.news@arcor.de> - 2022-09-10 09:03 +0200
  Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Markus Schaaf <mschaaf@elaboris.de> - 2022-09-10 13:08 +0200

csiph-web