kleine befehlssammlung



  • hi leute

    ich weiß das es vielleicht millonen von befehlen gibt, aber gibt es nicht so eine kleine sammlung für so ein paar standartbefehle ?

    jedesmal muss ich ewig nach irgentwas suchen, auch wenn es kleine, triviale sachen sind.

    ich weiß das man das garnicht vergleichen kann, aber sowas in der art wie diese seite hier wäre nett :

    http://dblounge.org/main.php?sid=ca59c15bef6204fd2169e87886498548&lang=de&site=news

    natürlich für c++ befehle 😉

    nur damit ich mal so nen anfang finden kann. Jedesmal programmier ich 2 minuten was und such dann erst über 10 minuten mit google nach standartbefehlen. das ist nicht sehr hilfreich.

    so viele leute die mit c++ arbeiten, da muss es doch sowas geben.

    Danke schonmal im voraus.



  • Es gibt in C++ keine Befehle. Auf www.cppreference.com findest Du aber eine Übersicht über die Standard-Library.

    MfG Jester



  • danke für den link, das hilft schonmal fürs erste.

    > Es gibt in C++ keine Befehle

    naja das ist finde ich eine definitionssache. wenn ich schreibe :
    "cout>>x;"
    dann ist das meiner meinung nach schon ein befehl.

    was sonst ? eine funktion ?

    naja bei den ganzen begriffen steig ich eh nicht durch. noch ne frage, will nicht unnötig nen neuen thread aufmachen, aber ich komm damit nicht klar.

    hab ne übungsaufgabe hier und da kann man sich echt nur verbeißen :

    man soll eine abtrakte factory klasse erstellen, welche eine factory-methode verwendet. Mittels dieser methode sollen objekte ihrer UNTERKLASSEN erzeugt werden und als funktionswert zurückgegeben.

    so nach dem schema

    class a mit methode factory
    unendlich viele unterklassen (b,c,d....)

    per aufruf in der main soll über die factory methode ein gewünschtes objekt der unterklasse erzeugt werden, welche man selbst wählt, also zur compilezeit nicht feststeht. und das soll dann zurückgegeben werden.

    als wenn ich praktisch schreiben würde :
    b *neues_objekt= new b();
    nur das es halt über die factory methode geht.

    ich bin aber der meinung das geht nicht, weil man die factory methode niemals aufrufen kann, wenn es eine abstrakte klasse ist. und selbst wenn nicht, kann eine klasse doch nicht ein objekt ihrer eigenen unterklasse erzeugen. Oder etwa doch ?

    Ich hoffe jemand versteht was ich meine und hat nen tip.



  • Student zu Gast schrieb:

    > Es gibt in C++ keine Befehle

    naja das ist finde ich eine definitionssache. wenn ich schreibe :
    "cout>>x;"
    dann ist das meiner meinung nach schon ein befehl.

    was sonst ? eine funktion ?

    Ja, eine Funktion.
    Nämlich die Funktion "operator>>" die das Object cout zur Verfügung stellt, da es ein Object von std::iostream ist.

    Befehle sind: if, else, while, for, do
    usw.

    C++ ansich besitzt nur diese Befehle + die Standard Typen (int, bool, char ...)
    Es ist die Standard Biliothek die dir Dinge wie cout oder was auch immer zur Verfügung stellt, also sollte man es auch nicht Befehl nennen.



  • fggggassds schrieb:

    Befehle sind: if, else, while, for, do

    Das sind Schlüsselwörter (engl. keywords), aber auch keine Befehle.



  • Das sind Anweisungen 😉



  • niemand eine ahnung zu dem anderem problem ?

    ich dachte das sollte für die profis hier leicht sein, wo wir das doch nach 7 vorlesungen dazu eindeutig lösen könnnen sollen...



  • Hallo

    doch Factory Pattern geht sehr gut, die Implementation erfolgt natürlich in der abgeleiteten nichtabstrakten Klasse

    class Base
    {
      ...
      virtual Base* Create() = 0;
    };
    
    class Child : public Base
    {
      ...
      virtual Base* Create();
    }
    
    Base* Child::Create()
    {
      return new Child();
    }
    

    bis bald
    akari



  • ja, das funktoniert zwar, aber bringt mich nicht weiter.

    ums an deinem beispiel zu erklären :

    ich soll mittels der methode " virtual Base* Create() "

    die childs erzeugen.

    und zwar indem ich praktisch aufrufe (nur als schema) :

    a = create(child 5);
    b = create(child x);

    und das soll universell für alle child 1..x gelten.

    da steh ich vor 2 problemen :

    1.: wie deklariere ich die funktion das eine beliebige unterklasse erstellt wird ? also nicht "return new Child();" sondern praktisch "return new Childx();" wobei x jede natürliche zahl annehmen kann, also unendlich viele.

    einfaches beispiel : eine maschine kann undendlich verschiedene produkte(objekte) herstellen und der benutzer wählt per druck( EINE methode) welches er möchte.

    2. problem : wie soll die methode jeweils aufgerufen werden ? Klasse Base soll abstrakt sein, was AFAIK soviel heißt, wie das sie keine eigenen objekte bildern kann(zumindest haben wirs so gelernt). wenn sie nun aber kein objekt hat, kann ich doch auch die methode nie aufrufen.

    und die child-objekte dürfen auch nur über die factory methode erzeugt werden.

    omg ist das kompliziert. 😞

    vielleicht tut aber auch deine lösung genau das, ich weiß es nicht...

    wäre nett wenn du/jemand anderes etwas schreibt wo das demonstiert wird(also ein programm was läuft), damit ich das mal überblicken kann. so steig ich ehrlich gesagt nicht mehr durch...



  • Hallo

    das Konzept was du da aufgezeichnet hast ist in C++ nicht möglich. Denn in C++ sind alle Typen schon zur Compilezeit fest, damit kann unmöglich zur Laufzeit durch den User ein komplett anderer Typ erstellt werden.
    Die einzige Möglichkeiten sind einerseits das Factory Pattern wie von mir bereits gezeigt.
    Oder eine plumpe Auswahl

    int x;
    ... // User gibt Auswahl ein
    switch(x)
    {
    case 1 : Class1();
    case 2 : Class2();
    ...
    };
    

    bis bald
    akari





  • > vielleicht hilft das

    das erschlägt mich eher 😮

    @ akari :

    wenn ich jetzt den code so habe, wie unten angegeben, wie erstelle ich dann das objekt selber ?

    das von mir als kommentar eingefügte kann ich ja nicht nehmen, da es einm,al nicht läuft und ich zum anderen auch kein objekt von Child ohne die methode create erstellen darf.

    vielleicht hast du ja noch nen tipp dafür...

    #include <iostream>
    using namespace std;
    
    class Base 
    { 
      public : virtual Base *Create() = 0; 
    }; 
    
    class Child : public Base 
    { 
      public : virtual Base *Create(); 
    }; 
    
    Base *Child::Create()  { return new Child();} 
    
    int main()
    {
        //Child a;
        //a = a.Create();
    
        int i;
        cin>>i;
    
        return 0;
    }
    


  • Student zu Gast schrieb:

    > vielleicht hilft das
    das erschlägt mich eher 😮

    na hätt' ja sein können 😉

    Student zu Gast schrieb:

    das von mir als kommentar eingefügte kann ich ja nicht nehmen, da es einm,al nicht läuft und ich zum anderen auch kein objekt von Child ohne die methode create erstellen darf.

    probier dies:

    #include <iostream>
    using namespace std;
    
    class Base
    {
      public:
      virtual void Hello() = 0;
    
      protected:
      Base()
      {
      }
    };
    
    class Child1 : public Base
    {
      public: 
      static Base *Create()
      {
          return new Child1();         
      }
    
      void Hello()
      {
          cout << "hello from object Child1" << endl;     
      }  
    };
    
    class Child2 : public Base
    {
      public: 
      static Base *Create()
      {
          return new Child2();         
      }
    
      void Hello()
      {
          cout << "hello from object Child2" << endl;     
      }  
    };
    
    int main()
    {
        Base *c1 = Child1::Create();
        Base *c2 = Child2::Create();
    
        // direkt erzeugen geht nicht. soll ja auch nicht gehen ;)
        // siehe protected constructor von Base
        //Base b;
    
        c1->Hello();
        c2->Hello();
    
        int i;
        cin>>i;
    
        return 0;
    }
    


  • Hallo

    bei dem Factor Pattern brauchst du so odert so ein Ausgangsobjekt. Wenn du das nicht willst/darfst, kannst du Factory Pattern nicht benutzen.

    Dann hilft wirklich nur die plumpe Auswahl.

    Da ich bezweifle das sich die Child-Klassen groß unterscheiden : kannst oder darfst du den Unterschied der verschiedenen Childklassen nicht irgendwie in einem Parameter zusammenfassen, so das du auf Polymorphie (und eigentlich auch Ableitung...) verzichten kannst?

    bis bald
    akari



  • danke net, das geht erstmal, da kann ich mir jetzt genau ankucken wies funktioniert(kann aus beispiel am besten das ganze nchvollziehen)

    @ akari:

    das ist ja das problem was sich stellte : "ist das überhaupt möglich und wenn ja, wie ?"

    so stand es am ende der aufgabenstellung. wenn so eine frage kommt, ist es aber in der regel möglich.

    werd einfach die lösung über 2-3 beispielklassen machen und mit (...) darauf deuten das dort unendlich viele stehen können, also in der case anweisung.

    Ich bedanke mich erstmal herzlich, das einem hier so gut geholfen wird. Werd mich morgen auch mal anmelden und öfter vorbeischauen. Nettes Forum 🙂


Anmelden zum Antworten