Vererbte Freundschaften?



  • Hi,

    ich möchte gerne sowas hinbekommen wie "vererbte freundschaften". doch das geht nicht 😞

    Network received: 5910899 bytes
    Server: SHOUTcast Distributed Network Audio Server/SolarisSparc v1.9.5
    Metadata received: 4480 bytes
    Metadata interval: 8192 bytes
    Stream name: D I G I T A L L Y - I M P O R T E D - Vocal Trance - a fusion of trance, dance, and chilling vocals together!
    Current title: SpaceDiver - Unspoken (original)
    
    class base;
    
    class foobar
    {
    public:
        foobar () : x(0) {}
        ~foobar () {}
    
        friend class base;
    private:
        int x;
    }
    
    class base
    {
    public:
        base () {}
        virtual base () {}
    
        virutal void test (foobar& tmp)
        {
            tmp.x = 22; // Läuft einwandfrei!
        }
    };
    
    class base2
    {
    public:
        base2 () {}
        base2 () {}
    
        void test (foobar& tmp)
        {
            tmp.x = 44; // Geht net :(
        }
    };
    

    Wie bekomme ich sowas hin, ohne base2 in foobar als friend zu bezeichnen, denn die abstrakte klasse von der geerbt wurde ist ja schon befreundet mit foobar?

    Gibt es dafür möglichkeiten? Kann man sowas evtl. geschickt umgehen? 😕



  • Nein, Freundschaft wird laut Standard weder vererbt (die Kinder meiner Freunde sind noch lange nicht meine Freunde - diese Situation betritt dich) noch transitiv weitergegeben (die Freunde meiner Freunde sind nicht gleich meine Freunde). Du könntest höchstens indirekt ausnutzen, daß base ein Freund von foobar ist, indem du ihm sagst, was er machen soll:

    class foobar
    {
    public:
      friend class base;
    private:
      int x;
    }
    
    classe base
    {
    public:
      virtual void setze_foo(foo& tmp,int val=22)
      {
        tmp.x=val;
      }
    };
    
    class derived : public base
    {
    public:
      virtual void setze_mein_foo(foo& tmp)
      {
        base::setze_foo(tmp,44);
      }
    };
    

Anmelden zum Antworten