arrays überschreiben



  • oder das array in der baseclass private, und in der abgelittenen klasse auch ein andreres private array



  • hallo, ich meinte c++. in der ersten klasse habe ich ein 16 byte grosses array und ich möchte in der geerbten klasse das array mit 56 bytes haben aber der name soll gleich bleiben. wie macht man das ohne std:vector DANKE!!!!



  • indem du das array anders initialisierst

    class a16
    {
     char *array
     public:
     a16(){ array = new char[16]; }
    };
    
    class a56 : public a16
    {
     public:
     a56(){ array = new char[56]; }
    };
    


  • ser1al_ausgeloggt schrieb:

    oder das array in der baseclass private, und in der abgelittenen klasse auch ein andreres private array

    hallo, ich habe das ausprobiert aber es funktioniert nicht

    #include <stdio.h>
    
    class MFTFrame {
        private:
        char frame[56];
    };
    
    class BFTFrame : public MFTFrame {
        private:
        char frame[16];
    };
    
    int main() {
        BFTFrame bft;
        printf ("%d\n", sizeof(bft));
    }
    

    die ausgabe zeigt 72 an warum nicht 16?
    DANKE!!!



  • thordk schrieb:

    indem du das array anders initialisierst

    class a16
    {
     char *array
     public:
     a16(){ array = new char[16]; }
    };
    
    class a56 : public a16
    {
     public:
     a56(){ array = new char[56]; }
    };
    

    ich darf kein new verwenden. es soll für einen mikrokontroller sein



  • overridden schrieb:

    ser1al_ausgeloggt schrieb:

    oder das array in der baseclass private, und in der abgelittenen klasse auch ein andreres private array

    hallo, ich habe das ausprobiert aber es funktioniert nicht

    #include <stdio.h>
    
    class MFTFrame {
        private:
        char frame[56];
    };
    
    class BFTFrame : public MFTFrame {
        private:
        char frame[16];
    };
    
    int main() {
        BFTFrame bft;
        printf ("%d\n", sizeof(bft));
    }
    

    die ausgabe zeigt 72 an warum nicht 16?
    DANKE!!!

    Weil 56+16 = 72! 🙂



  • Warum willst Du unbedingt erben? Da stimmt doch was nicht.
    Könnte mir noch eine Version mit templates vorstellen, falls du welche verwenden kannst.



  • overridden schrieb:

    ich darf kein new verwenden. es soll für einen mikrokontroller sein

    also doch reines c? (mal von class abgesehen, könnt ja auch struct sein)

    und deine klasse bftframe ist 72 byte groß, weil sie das 56 byte array der basisklasse erbt, auch wenn dieses nicht für die klasse sichtbar ist.

    muss bftframe vom mftframe erben? sonst evtl.

    (ups, was im code vergessen *G edit..)

    class BaseFrame{
     private:
     virtual char *frame = 0; // das ist so nur sinnvoll, wenn deine beerbenden klassen friends sind
    };
    
    class MFTFrame : public BaseFrame {
        private:
        char frame[56];
    };
    
    class BFTFrame : public BaseFrame {
        private:
        char frame[16];
    };
    

    so ist polymorphie auch gewährleistet, allerdings vielleicht nicht so, wie du es brauchst.



  • du könntest auch funktionen und daten trennen:

    class FrameFunctions
    {
     ...
    };
    
    class BigFrame : public FrameFunctions
    {
      char frame[REALLY_BIG];
    };
    
    class SmallFrame extends FrameFunctions
    {
      char frame[MUCH_SMALLER];
    };
    

    aber, wie oben schon erwähnt, ist vererbung wohl nicht das richtige dafür...
    🙂



  • thordk schrieb:

    overridden schrieb:

    ich darf kein new verwenden. es soll für einen mikrokontroller sein

    also doch reines c? (mal von class abgesehen, könnt ja auch struct sein)

    und deine klasse bftframe ist 72 byte groß, weil sie das 56 byte array der basisklasse erbt, auch wenn dieses nicht für die klasse sichtbar ist.

    muss bftframe vom mftframe erben? sonst evtl.

    (ups, was im code vergessen *G edit..)

    class BaseFrame{
     private:
     virtual char *frame = 0; // das ist so nur sinnvoll, wenn deine beerbenden klassen friends sind
    };
    
    class MFTFrame : public BaseFrame {
        private:
        char frame[56];
    };
    
    class BFTFrame : public BaseFrame {
        private:
        char frame[16];
    };
    

    so ist polymorphie auch gewährleistet, allerdings vielleicht nicht so, wie du es brauchst.

    aber das geht nicht. ich bekomme kompilerfehler virtual ist bei der deklaration von daten nicht zulässig.



  • overridden schrieb:

    ich darf kein new verwenden. es soll für einen mikrokontroller sein

    🤡



  • pale dog schrieb:

    du könntest auch funktionen und daten trennen:

    class FrameFunctions
    {
     ...
    };
    
    class BigFrame : public FrameFunctions
    {
      char frame[REALLY_BIG];
    };
    
    class SmallFrame extends FrameFunctions
    {
      char frame[MUCH_SMALLER];
    };
    

    aber, wie oben schon erwähnt, ist vererbung wohl nicht das richtige dafür...
    🙂

    danke aber ich kanns auch nicht kompilieren. was ist extends?



  • overridden schrieb:

    was ist extends?

    oooh, sorry, das ist von einer anderen programmiersprache, muss natürlich heissen class SmallFrame : public FrameFunctions
    🙂


Anmelden zum Antworten