Klasse, die vom Basistyp erbt



  • Hi,

    ich wuerde gern eine Klasse definieren, die den Datentyp int erweitert, also von int abgeleitet ist:

    class C : public int {
       }
    

    Dies funktioniert ja nicht. Ich wuerde gern wissen: Wieso nicht, welche gruende sprechen dagegen so etwas in C++ einzubauen?
    Und wie kann man dann eine erweiterung eines solchen Grunddatentypes realisieren?

    Gruesse 😉



  • Frag dich mal andersrum. Was für Gründe fallen dir ein sowas zu machen zu wollen? Wenn du wirklich etwas ähnliches brauchst schreib dir eine Klasse die sich wie ein int verhält.



  • Bin dito mit david;)

    class MYINT{
    
      int m_i;  
      MYINT(int i) : m_i(i){
    
      }
      MYINT(const MYINT &oScr){
        m_i= oScr.m_i;
      } 
      MYINT& operator=(const MYINT &oScr){
    
      if(this != &oScr)
        this->m_i= oScr.m_i;
      return *this;
      }
    
      MYINT& operator+(const MYINT &oScr){
       return m_i+ oScr.m_i;
      }
    .
    .
    .
    }
    

    sowas in der art würd ich machen..



  • wenn man so nen blödsinn hier macht:

    class superint
    {
      int val;
      public:
      superint() {}
      superint(int val) : val(val) {}
      operator int() const { return val; }
    };
    

    verhält sich die klasse schon fast wie nen int. toll oder? 😃



  • BorisDieKlinge schrieb:

    MYINT& operator=(const MYINT &oScr){
      
      if(this != &oScr)
        this->m_i= oScr.m_i;
      return *this;
      }
    

    Test auf Selbstzuweisung bei einem int? 😮 Sowas hat bis auf ganz wenige Ausnahmen in keinem op= etwas verloren.



  • BorisDieKlinge schrieb:

    class MYINT{
     
      MYINT& operator+(const MYINT &oScr){
       return m_i+ oScr.m_i;
      }
    }
    

    PFUI. m_i + oScr.m_i ergibt einen int, okay. der implizite Cast nach MYINT geht ja auch noch. ABER: durch den impliziten Cast wird ein temporaeres Objekt erstellt, auf das du eine Referenz zurueckgibst, die dadurch sofort ungueltig ist.
    Also lass beim operator + bitte grundsaetzlich die Referenz als Rueckgabewert ganz sein! Zu viel Speicher-Sparsamkeit ist hier toedlich!


Anmelden zum Antworten