Pendant zu Interfaces von JAVA in C++



  • Hallo,

    ich habe angefangen mich mit Entwurfsmustern zu beschäftigen. Die Beispielcodes sind in Java geschrieben und nutzen oft Interfaces wie im folgenden Code:

    public interface Verhalten  {
      public void tuwas();
    }
    
    public class Klasse implements Verhalten {
      public void tuwas()  {
        System.out.println("Ich tu was");
      }
    }
    

    Wie würde sowas in C++ aussehen? Sind interfaces da virtuelle Klassen die einfach nur vererbt werden unteranderem auch durch Mehrfachvererbung?

    Wäre supernett wenn mir einer das Beispiel in C++ schreiben könnte.

    Dankeschön



  • Ich habe es mal selbst versucht. Ist der folgende Code die richtige portierung des Javacodes?

    class Verhalten
    {
        public:
            virtual void tuwas();
    };
    
    class Klasse : public Verhalten
    {
        void tuwas()
        {
            std::cout << "Ich tu was" << std::endl;
        }
    };
    


  • Ich bin mir da jetzt nicht 100%ig sicher aber ich würde behaupten das Abstrakte Basisklassen am nähesten an Interfaces kommen.

    class Verhalten
    {
       public:
       virtual void tu_was() = 0;
    };
    
    class Klasse : public Verhalten
    {
     public:
     virtual void tu_was(){
        std::cout << "Ich tue irgendwas" << std::endl;
     }
    };
    

    Das was du da benutzt wäre auch möglich nur müsstest du "eigentlich" Verhalten implementieren.
    Verhalten kann man so wie es bei dir ist auch selbst instantiieren. Meine Version hingegen nicht.
    Benutzen kann man das aber so:

    Verhalten * v = new Klasse(); v->tu_was();
    

    bzw so:

    Klasse k; Verhalten & v = k; v.tu_was();
    

    Edit: Kannst dich ja mal über pure virtual informieren 😉

    BR



  • evilissimo schrieb:

    Ich bin mir da jetzt nicht 100%ig sicher aber ich würde behaupten das Abstrakte Basisklassen am nähesten an Interfaces kommen.

    Ich auch. Allerdings gibt es da ja auch anderes. Es werden zum Beispiel - gerade bei der Verwendung von Templates - auch außersprachliche Vereinbarungen getroffen, die einen ähnlichen Zweck wie die Interfaces von Java haben.



  • Hallo,
    gerade bei ABCs sollte man aber immer an einen virtuellen Destruktor denken (oder den Dtor protected machen).


Anmelden zum Antworten