von der Klasse string ableiten



  • Hallo,

    möchte von der Klasse string ableiten.
    Habe das so versucht:

    class mystr:public string
    {
       private:
       public:
       //Meine eigenen Methoden ....
    };
    

    Wenn ich dann schreibe:

    int main(int argc, char* argv[])
    {
       mystr a="abc";
       return 0;
    }
    

    bekomme ich die Fehlermeldung 'Konvertierung von char * nach mystr nicht möglich.
    Was mache ich falsch oder ist so eine Ableitung nicht Möglich ?

    MfG

    Michael



  • Hallo

    Die fehlermeldung kommt daher, das du keinen Konstruktor für mystr mit einen char* als Parameter anbietest.

    Desweiteren solltest du nicht von std:.string ableiten, dafür sind die STL-Klassen nicht ausgelegt!
    Sondern du solltest in deine Klasse einen Member von std::string einbauen.

    bis bald
    akari



  • std::string hat keinen virtuellen destruktor und ist folglich nicht dafür gedacht davon abzuleiten.
    du wirst komposition benutzen müssen.

    class FrickelString
    {
    private:
    std::string _string;
    ...
    };
    

    es gibt auchnoch möglichkeit das mit privater vererbung (kann auch komposition ausdrücken) zu lösen.

    frickel :>



  • Micha1979 schrieb:

    Was mache ich falsch oder ist so eine Ableitung nicht Möglich ?

    Doch, schon. Nur solltest du nicht public ableiten (wegen des bereits angesprochenen nicht-virtuellen dtors). Und explizite ctors werden nicht vererbt. Diese musst du selbst erstellen.

    class mystr:public string
    {
       private:
       public:
          mystr(const char* s)
             : string(s)
          {
          }
    };
    

    Aber ob Ableitung hier wirklich sinnvoll ist? Einige Leute würden wohl sagen, dass Layering besser wäre.



  • groovemaster schrieb:

    Micha1979 schrieb:

    Was mache ich falsch oder ist so eine Ableitung nicht Möglich ?

    Doch, schon. Nur solltest du nicht public ableiten (wegen des bereits angesprochenen nicht-virtuellen dtors). Und explizite ctors werden nicht vererbt. Diese musst du selbst erstellen.

    class mystr:public string
    {
       private:
       public:
          mystr(const char* s)
             : string(s)
          {
          }
    };
    

    Aber ob Ableitung hier wirklich sinnvoll ist? Einige Leute würden wohl sagen, dass Layering besser wäre.

    Da du immern och öffentlich ableitest hast du das Problem mit dem nicht virtuellen d'tor immer noch... 🙂



  • Das wurde doch bereits erwähnt. Das Beispiel soll lediglich verdeutlichen, wie der selbst erstellte ctor aussehen kann.


Anmelden zum Antworten