Objektorientierte Programmierung mit C++



  • In C++ ist es ja so, dass die Main-Funktion ausserhalb einer Klasse aufgerufen wird. Ich würde nun gerne sie in eine Klasse stecken damit mein Programm wirklich absolut Objektorientiert ist, ähnlich wie in Java. Meine erste Idee war in der Klasse, in der die Main stecken soll eine überladene main-methode zu erstellen, die aus zusätzlichen Rarameter eine Referenz oder einen Zeiger auf die Main-Funktion übergeben bekommt.

    Könnte das so klappen? Oder habt ihr andere Vorschläge?!



  • Kannst Du bitte den Vorteil erklären, wenn "Dein Programm wirklich absolut objektorientiert ist"???



  • Warum willst du die main-Funktion in eine Klasse stecken?

    IMHO ist 'main' nichts, was man als Objekt beschreiben koennte und demnach gehoert
    es auch nicht in eine Klasse.

    IMHO solltest du Java oder C# programmieren, wenn du unbedingt deine Main-
    Funktion in ner Klasse haben willst.

    mfg
    v R



  • Ich weiß nicht wie's in C# ist, aber auch in Java gehört die main-Funktion keinem Objekt, sondern ist statisch. Denke das wird in Java so sein, weil's dort keine Funktionen ausserhalb von Klassen geben kann (oder irre ich mich?).

    Jedenfalls ist es doch egal ob die main nun als static in irgendeiner Klasse liegt oder ausserhalb in einer Datei main.cpp.



  • Ich weiß nicht wie's in C# ist, aber auch in Java gehört die main-Funktion keinem
    Objekt, sondern ist statisch.

    Ahh, darauf hab ich gar nicht geachtet, sry.

    mfg
    v R



  • Hoi!

    In C# verhält es sich genauso wie in Java. die Main-Methode ist ebenfalls in statisch einer Klasse.



  • Original erstellt von DrGreenthumb:
    **Denke das wird in Java so sein, weil's dort keine Funktionen ausserhalb von Klassen geben kann (oder irre ich mich?).
    **

    Ne, irrst Dich nicht. Genau das ist der Grund, warum in Java die main-Funktion in den "Namespace" einer Klasse gehört.
    Aber ich weiss echt nicht, was man daran so schön finden kann. Im Fall von C/C++ gibt es nur EINE Main-Funktion und dadurch ist der Programmstart auch eindeutig festgelegt.
    Im Fall von Java kann man jeder Klasse eine statische Main-Funktion spendieren. Da man bei Java auch für jede Klasse eine eigene Source-Datei anlegen muss (.java) und der Compiler zunächst auch nur daraus einzelne Bytecode-Dateien (.class) daraus erzeugt, muss man das Programm immer durch die Angabe der Class-Datei starten, in der die Main-Funktion steckt, mit der begonnen werden soll. Eine angabe einer anderen .class-Datei kann im prinzip das selbe Programm starten, aber es wird mit einer anderen main-Funktion begonnen. Der einzige Ausweg besteht darin, die Dateien zu einem JAR-File zusammen zu packen. Bei diesem Vorgang kann man gleichzeitig angeben, welche .class-Datei die Start-"Klasse" ist.
    Aber warum will man diesen "Vorteil von C gegenüber Java" krampfhaft zu nichte machen? (was im Übrigen nicht geht, der Eintiegspunkt wird immer eindeutig sein, sonst Linker-Error!)



  • Falls Du übrigens nach einer Lösung suchst, die Frameworks realisieren das üblicherweise [sinngemäß] so:

    class Application
    {
    public:
       virtual int run() = 0;
    };
    class DeineApp : public Application
    {
    public:
       virtual int run()
       {
          cout << "Hello World\n";
          return 0;
       } 
    }
    int main()
    {
       return theApp.run();
    }
    

    Wobei der Inhalt von main dann nicht sichtbar ist sondern versteckt wird... d.h. main ist fest programmiert und nicht direkt sichtbar.

    Das ist so ungefähr die Simulation in C++.



  • Warum soll das Programm dadurch Objektorientierter sein.

    OO != Alles so wie in Java



  • Hi,

    also das Problem ist das die Main eben dann eine Funktion ist und eine Funktion ist ein Strukturiertes Gebilde, was in einer reinen OOP nix zu suchen hat. Und java ist eben die einzige reine Programmiersprache der OOP die es gibt (meies Wissens nach belehrt mich eines besseren). Dort kann man nämlich gar nicht mehr strukturiert programmieren. Allerdings will ich nicht mit Java programmieren, sondern mit C++ und hatte die Idee, auch in C++ so eine "Main- Methode" zu realisieren, weiss nur nicht genau wie.



  • Dort kann man nämlich gar nicht mehr strukturiert programmieren

    Also hast du in Java wahllos irgendwelche Objekte herumschweben?

    mfg
    v R



  • Original erstellt von Parapiler:
    also das Problem ist das die Main eben dann eine Funktion ist und eine Funktion ist ein Strukturiertes Gebilde, was in einer reinen OOP nix zu suchen hat. Und java ist eben die einzige reine Programmiersprache der OOP die es gibt (meies Wissens nach belehrt mich eines besseren). Dort kann man nämlich gar nicht mehr strukturiert programmieren. Allerdings will ich nicht mit Java programmieren, sondern mit C++ und hatte die Idee, auch in C++ so eine "Main- Methode" zu realisieren, weiss nur nicht genau wie.

    *lol*

    In Java kann man sehr wohl strukturiert programmieren:

    class Programm
    {
      int a,b,c;
      static void foo() { ... }
      static void foo2() { ... }
      static void foo3() { ... }
      static void main()
      {
         foo();
         foo2();
         foo3();
      }
    }
    

    und die member vars kann man als globale variablen verwenden - also ich sehe da kein problem...

    OOP != alles in einer Klasse

    main passt einfach nicht in eine Klasse.

    Java quetscht alles in eine Klasse und gibt es als Objekt Orientiert aus - das stimmt aber nicht immer. Nicht alles was in einer Klasse steckt muss OO sein! (siehe mein Beispiel)



  • Objektorientierung ist eine Herangehensweise an ein Problem. Eine Programmiersprache ist nicht per se objektorientiert. Objektorientierte Sprache bedeutet im allgemeinen, das sie Sprachmittel zu Verfügung stellt, die es erleichtern das Problem objektorientiert zu lösen.
    Aber Du kannst auch in Fortran, COBOL und Assembler objektorientiert proggen und Du kannst auch in Java Spagetti-Code schreiben.

    Außerdem gibts da doch noch ein paar Sprachen, die so so "objektorientiert sind" wie Java. Ruby, Smalltalk, etc.

    Das main-Konzept von Java hat schon ein paar nette Vorteile. z.B. kann man damit für jede Klasse ein Self-Check-Programm schreiben und den Selbstest jederzeit durchführen. Das hat aber nix direkt damit zu tun, dass main in ner Klasse ist, sondern dass man die einzelnen Module ohne großen Zusatzaufwand (d.h. mehrere Projekte, mehrere exe's erzeugen etc) zu startbaren Programmen machen kann.
    Aber das kriegst Du in C++ so eh nicht hin, also warum die main-Funktion in ne Klasse?



  • Original erstellt von kartoffelsack:
    [QB]Das main-Konzept von Java hat schon ein paar nette Vorteile. z.B. kann man damit für jede Klasse ein Self-Check-Programm schreiben und den Selbstest jederzeit durchführen. Das hat aber nix direkt damit zu tun, dass main in ner Klasse ist, sondern dass man die einzelnen Module ohne großen Zusatzaufwand (d.h. mehrere Projekte, mehrere exe's erzeugen etc) zu startbaren Programmen machen kann.[QB]

    man kann ja

    ...der ganze code...
    
    #ifdef MODUL_TEXT
    int main()
    {
      ...self test...
    }
    #endif
    

    aber klar, so schön wie in java gehts nicht



  • class Programm
    {
      int a,b,c;
      static void foo() { ... }
      static void foo2() { ... }
      static void foo3() { ... }
      static void main()
      {
         foo();
         foo2();
         foo3();
      }
    }
    
    und die member vars kann man als globale variablen verwenden - also ich sehe da kein problem...
    

    die vars müßten aber auch static sein, wenn man sie nicht nur als Dekoration haben will



  • Marc++us, du hast in der Eile ein Semlikolon vergessen und theApp existiert garnicht. Nur falls ein Newbee das beispiel ausprobiert und sich wundert.

    Von kartoffelsack hätte ich dann gerne ein Beispiel für die Objektorientierte Programmierung in Assembler. Ich denke gewisse vorraussetzungen müssen schon erfüllt sein, aber das sind sie in C++ auf jeden fall.


Anmelden zum Antworten