Fachbegriffe in der Welt der Programmiersprachen



  • Hallo,

    ich versuche gerade mich in C++ einzuarbeiten, bzw. von Perl / TK auf C++ umzusteigen.

    Ich lese in letzter Zeit immer wieder C++ Tutorials, in denen Begriffe auftauchen, welche mir zwar vom Namen her bekannt sind, allerdings hab ich nie begriffen, was dahinter steckt.
    Eigentlich sind diese Begriffe nicht wirklich C++ Begriffe, ich vermute mal, ich verwende diese Dinge in Perl ständig, nur es ist mir halt warscheinlich nicht klar.

    Es geht dabei um diese Begriffe:
    - Konstruktor
    - Instanz / Instanzierung
    - Referenz
    - Pointer

    Weiterhin sind mir 4 Dinge in C++ nicht so ganz klar:
    1. Der Zusammenhang zwischen .h, .cpp, .dll und .rc Dateien
    2. Der Unterschied zwischen Klasse, Funktion und Methode (Wenn es in C++ so was gibt)
    3. Was public, static, void und die ganzen anderen Dinge, welche vor einer Methode(Funktion?) stehen, zu bedeuten haben.
    4. Ich verwende MS VS 6.0 Wenn ich hier eine Funktion erstellen will, dachte ich, es würde ausreichen in die .cpp Datei den Quellcode der Funktion, also z.B. void function machwas(){//machwas} einzutragen. Wenn man das aber nicht über den Asistenten vom Visual Studio macht, gibt es dann Kompilierfehler. Warum?

    Ich habe bisher kein Tutorial gefunden, welches das wirklich brauchbar erklärt.
    Ich wäre dankbar, wenn jemand (professionell) "Aufklären" könnte.

    Bitte keine Links zu irgendwelchen Absolut-Planlos-C++-Tutorials posten, das bringt mir nix...

    Danke im voraus.

    mfg

    trequ



  • trequ schrieb:

    Bitte keine Links zu irgendwelchen Absolut-Planlos-C++-Tutorials posten, das bringt mir nix...

    einige der Sachen, die du fragst, sind aber relativ wesentlich (Ctor (== Konstruktor), "was ist eine Klasse", etc.), da waer ein gutes Nachschlagewerk wirklich von Nutzen 😉
    Sooo trivial ist der Umstieg naemlich nicht, wenn du noch nie OOP gemacht hast

    http://www.c-plusplus.net/c___1.htm

    ich versuch's trotzdem mal:
    Konstruktor
    der Konstruktor ist eine spezielle Methode (siehe weiter unten) einer Klasse (ebenfalls s.u.), die bei der Instanzierung (s.u.) aufgerufen wird, um die Klasse zu "erstellen"... der Ctor (= gelaeufige Abkuerzung) hat den gleichen Namen wie die Klasse selbst.

    z. B.

    class Foo
    {
       public:
         Foo();  // das ist der Ctor
    
         void bar(); // irgend eine Funktion
    
         // ...
    };
    
    // ...
    
    int main()
    {
        Foo ein_foo;  // Instanzierung des Objekts, der Ctor wird hier automatisch aufgerufen
        // ...
    }
    

    ein Ctor kann z. B. dazu dienen, Resourcen fuer ein Objekt zu beschaffen (z. B. Speicher), grundlegende Dinge zu initialisieren (z. B. eine DAtei zu oeffnen, Konfigurationswerte auslesen...) oder aehnliches

    Instanz
    die Instanz ist ein... ehm.... einfach eine Variable eines Types...

    z. B.

    int foo = 3;
    

    foo ist nun eine Instanz des Types int. Von Instanzen spricht man aber eher bei grossen Typen (Objekten)... An der Stelle, an der die Instanz erstellt wird, spricht von Instanzierung.

    Pointer
    ein Pointer ist ein eigener Datentyp, naemlich ein "Zeiger". D.h. ein Pointer speichert keinen Wert, sondern einen Zeiger auf eine andere Variable. In Perl gibts auch sowas... ehm... ich glaub da nennt man's Referenz...
    Einen Zeiger auf einen Int deklariert man mit int*, einen Zeiger auf char mit char* usw. (also immer ein * zum eigenltichen Datentyp dazumachen)

    z. B.

    int foo = 3;
    int* pointer_auf_foo = &foo;  // &Variablennamen gibt einen Pointer zurueck
    

    Waere das C++ Aequivalent zu

    $foo = 3;
    $pointer_auf_foo = \$foo;
    

    Auf die gezeigte Variable greift man zu, indem man ein * vor den Pointernamen setzt

    *pointer_auf_foo = 4; // foo enthaelt jetzt den Wert 4
    

    Referenz
    Eine Referenz ist im Grunde das gleiche wie ein Pointer, nur
    a) kann eine Referenz nicht 0 sein
    b) wird eine Referenz 1x zugewiesen und kann anschliessend nie mehr auf etwas anderes verweisen
    c) ist die Schreibweise einfacher.
    d) Deklariert man Referenzen, indem man ein & nach dem Datentyp setzt

    z. B.

    int foo = 3;
    int& referenz_auf_foo = foo;
    referenz_auf_foo = 4; // foo ist jetzt 4
    

    So, und an dieser Stelle hoer ich auf, weil du jetzt hoffentlich eingesehen hast, dass die Materie wesentlich komplexer ist, als du vielleicht geglaubt hast. Besonders ueber Klassen & ueber Pointer muesste man noch Baende schreiben, bevor alles gesagt ist



  • ich hab mal ein wenig gegoogelt .... (war zu faul selber zuschreiben)

    Konstruktor - Bei Programmiersprachen ist damit meist eine spezielle Funktion gemeint, die ein Object konstruiert, also erzeugt (Instanzierung). Wird ein neues Objekt erzeugt, so muß dafür Speicher bereitgestellt werden. Außerdem ist es erforderlich - oder sinnvoll - die einzelnen Elemente des Objektes zu initialisieren oder auch dafür Speicher bereitzustellen. Diese Aufgaben werden vom Konstruktor übernommen.

    Instanz - Ein einzelnes Objekt ist eine Instanz/ein Exemplar einer Klasse. Das Verhalten eines Objekts wird durch Methoden, der Status eines Objekts durch Attribute beschrieben.

    Instanzierung - Das Erzeugen einer Klasse. -> siehe Konstruktor

    Referenz - Eine Variable (z.B. der Name eines Objekts), die nur eine Speicheradresse enthält, an der sich das Objekt befindet, und nicht die eigentlichen Daten des Objekts. Eine Referenz entspricht einem Zeiger.

    Pointer - auch Zeiger; -> siehe Referenz



  • IMHO ist dir aber mit einem Tutorial oder besser, einem Buch, besser geholfen. Du fragst ja nicht nur nach einem Begriff, sondern gleich nach halb C++.



  • In C++ gibt es keine Variablen und Funktionen, wie hier behauptet wird!!
    In OOP gibt es nur Eigenschaften und Methoden.

    Der Unterschied zwischen einer Eigenschaft und einer Variblen ist, das eine Eigenschaft nur in einer Klasse deklariert werden und einen Wert zugewiesen bekommen kann.

    Der Unterschied zwischen einer Methode und einer Funktion ist, ähnlich wie bei der Eigenschaft, das man die Methode nur in einer Klasse definieren kann.

    Um auf die Eigenschaften und Metohden zuzugreifen, muß man einer Instanz (=Objekt) der Klasse erstellen, seidenn die Eigenschaft bzw. Methode ist als static deklariert.



  • schrankwand schrieb:

    In C++ gibt es keine Variablen und Funktionen, wie hier behauptet wird!!

    Ach? Komisch, daß ich die die ganze Zeit benutze.

    int i;
    
    void f()
    {
    }
    

    Was ist das Deiner Meinung nach? Keine Variable/Funktion oder kein C++?

    schrankwand schrieb:

    In OOP gibt es nur Eigenschaften und Methoden.

    Eigenschaft (englisch: property) ja, das ist tatsächlich etwas was es in C++ nicht gibt. Was Du wahrscheinlich meinst sind Attribute.

    MfG Jester



  • trequ schrieb:

    1. Der Zusammenhang zwischen .h, .cpp, .dll und .rc Dateien

    dll und rc haben nichts mit c++ zu tun. Das sind Ressourcen und Bilbliotheksdateien. .h sind Header, .cpp sind Implenetierungsdateien. Also im Header schreibst du zum Bsp. die Deklaration einer Funktion ( void f(int i); ),
    in der cpp datei schreibst du die Implementierung

    //func.h
    void f (int i);
    
    //func.cpp
    void f (int i)
    //Es folgt der Funktionsblock
    {
    	return i*i;
    }
    

    2. Der Unterschied zwischen Klasse, Funktion und Methode (Wenn es in C++ so was gibt)

    Dazu musst du ein entsprechendes Buch bzw. Tutorial lesen. Das denken wird und wurde bisher noch niemandem abgenommen.

    3. Was public, static, void und die ganzen anderen Dinge, welche vor einer Methode(Funktion?) stehen, zu bedeuten haben.

    void ist nichts. Schreibst du void, machst du klar, das eine Funktion nichts zurückgibt. Da es nichts ist, kannst du keine Instanz bzw. Variable von nichts deklarieren.

    void data;	//gibts nicht
    

    int, float, double, char (und wchar_t) sind datentypen. short vor einer Variable macht die Variable kleiner, d.h. sie verbraucht weniger speicherplatz. long macht sie größer (jedoch nicht in allen fällen, z.B. long int ist auf den meisten systemen gleich int). Bei static, public usw verweise ich auf eine entsprechende Lektüre.

    Ich habe bisher kein Tutorial gefunden, welches das wirklich brauchbar erklärt.
    Ich wäre dankbar, wenn jemand (professionell) "Aufklären" könnte.

    Wie gesagt, das denken kann dir nicht abgenommen werden, jeder hat mal so angefangen. Imho gibts fast kein c++ Tutorial, das wirklich schlecht ist. Für den Anfang solltest du aber ein Buch kaufen. Schau in die FAQ, da kannst du Buchempfehlungen nachlesen.

    Danke im voraus.

    Danke lieber nachher 😉



  • schrankwand schrieb:

    In C++ gibt es keine Variablen und Funktionen, wie hier behauptet wird!!
    In OOP gibt es nur Eigenschaften und Methoden.

    C++ und OOP ist aber nicht das gleiche. In C++ kann man (mit einiger Mühe) OOP betreiben, aber man muss nicht. Normalerweise kommen in einem C++-Programm mehrere Programmierstile zur Anwendung, man spricht auch von einer Multi-Paradigmen-Sprache.

    Natürlich gibt es in C++ Variablen und auch Funktionen, ich kann dir gern die entsprechenden Absätze aus der Sprachdefinition zitieren, wenn du willst. Eigenschaften und Methoden gibt es dagegen strenggenommen nicht.

    Ich frage mich allerdings, ob du den Stil, den du hier propagierst, eigentlich selbst konsequent durchziehst. Was ist mit Schleifen?

    for (int i = 0; i < n; ++i)
      someObject.doit(n);
    

    Da i eindeutig eine Variable ist, benutzt du sowas wohl nicht? Wie dann? Definierst du i als Klassenmember (dann hättest du eindeutig OOP in den falschen Hals bekommen)? Oder abstrahierst du eine Schleife als ein IterationsObjekt in irgendeiner Form, wie man es vll in Smalltalk oder so machen würde? (dann hättest du C++ in den falschen Hals bekommen 🤡 )



  • Hallo,

    zuerst mal ein fettes DANKE 👍 👍 🙂

    Ich habe mir Perl, PHP, QBasic, mySQL, ... alles im Eigenstudium beigebracht. Hier habe ich z.B. int foo = 3; dauernd verwendet, aber das das eine Instanz ist, hab ich bisher nicht gewusst. Wenn man eine Anleitung liest, steht da immer wieder "Wir erstellen uns eine Instanz von xyz mit dem Namen abc". Toll.

    Bashar schrieb:

    IMHO ist dir aber mit einem Tutorial oder besser, einem Buch, besser geholfen. Du fragst ja nicht nur nach einem Begriff, sondern gleich nach halb C++.

    Ich weiß... sorry.
    Ich hab mir bei Amazon ein paar Bücher zu dem Thema bestellt, aber bis die da sind...

    2 Fragen hab ich noch:
    1. Sicher kennt ihr den HTML-Stil den Frontpage anlegt. Der ist ja echt super. 😞
    --> Man kann mindestens 40% löschen...
    Frage: Wie sieht es mit M$ Visual Studio aus? Das legt ja auch 100.000 Dateien an. Macht das Sinn, oder ist da auch jede 2. überflüssig?

    2. Angenommen ich lese in C++ eine config.ini Datei ein. Dann habe ich z.B. in der Variable bool machdies = true; stehen.
    Was ich noch nicht begriffen haben, ist das public.
    Die Variable machdies ist jetzt ja offenbar private, wenn ich in einer anderen Funktion drauf zugreifen will (womit ich in Perl nie ein Prob hatte), kriege ich den Fehler, dass diese Variable unbekannt ist.
    Aber ich kann doch bestimmt mit public diese Variable zugänglich machen, oder?
    Wenn ja, wie?

    Danke.

    mfg
    trequ



  • trequ schrieb:

    2 Fragen hab ich noch:
    1. Sicher kennt ihr den HTML-Stil den Frontpage anlegt. Der ist ja echt super. 😞
    --> Man kann mindestens 40% löschen...
    Frage: Wie sieht es mit M$ Visual Studio aus? Das legt ja auch 100.000 Dateien an. Macht das Sinn, oder ist da auch jede 2. überflüssig?

    jein... wenn du ein MFC oder WinAPI-Projekt begonnen hast, wird wirklich eine Unmenge an Dateien angelegt... als Anfaenger tust du aber sowieso gut daran, Anfangs "Konsolen"-Projekte zu starten (Also ohne GUI, laeuft wie Perl auf der Shell), und da werden IIRC (verwende das MSVS nicht mehr) keine ueberfluessigen DAteien erstellt.

    2. Angenommen ich lese in C++ eine config.ini Datei ein. Dann habe ich z.B. in der Variable bool machdies = true; stehen.
    Was ich noch nicht begriffen haben, ist das public.
    Die Variable machdies ist jetzt ja offenbar private, wenn ich in einer anderen Funktion drauf zugreifen will (womit ich in Perl nie ein Prob hatte), kriege ich den Fehler, dass diese Variable unbekannt ist.
    Aber ich kann doch bestimmt mit public diese Variable zugänglich machen, oder?
    Wenn ja, wie?

    a) public, private (und protected gibts BTW auch noch) gibts nur im Zusammenhang mit Klassen. Nicht alles in C++ ist eine Klasse.

    b) innerhalb einer Klasse kann auf allle Attribute ( = Variablen) der Klasse zugreifen

    c) Wenn du in einer Funktion eine Variable erstellst, dann ist die LOKAL fuer diese Funktion. In Perl waere das (wenn mich meine Perlkentnisse nicht im Stich lassen)

    z. B.

    sub foo
    {
        local $meine_variable
    }
    
    sub bar
    {
        #hier kann ich nicht auf $meine_variable zugreifen, die existiert ja nur LOKAL in foo
    }
    

    Genau das selbe gilt IMMER in C++ : was du in einer Funktion deklariert hast, gibts nur in dieser einen Funktion.
    Wenn du willst, dass beide Funktionen auf die Variable zugreifen koennen, musst du entweder die Variable global machen (sowas gehoert sich aber nicht und ist absolut verpoehnt!!!) oder die Variable immer als Parameter mitgeben:

    void foo(bool machdies)
    {
        // bla, bla, bla
    }
    
    void bar(bool machdies)
    {
       // bla, bla, bla
    }
    
    int main()
    {
        // erstellt machdies
        bool machdies;
    
        foo(machdies);
        bar(machdies);
    }
    

    Beachte aber, dass ich die Bezeichnung "machdies" nur aus reinem Spass bei foo und bar so gewaehlt habe, ich haette genausogut

    void foo(bool ein_anderer_name)
    {
       // ....
    }
    

    schreiben koennen.
    Und beachte ausserdem, dass foo und bar die Variable machdies nicht veraendern koennen, dazu muesstest du sie byReference uebergeben, und nicht (wie hier) byValue... (und dazu musst du dich erstmal mit Pointern und Referenzen auskennen).

    Mein Tipp: http://mindview.net/Books/TICPP/ThinkingInCPP2e.html

    Da findest du 2 sehr, sehr, sehr gute Buecher zum Thema C++, du solltest jetzt nicht krampfhaft versuchen, in 2 Wochen C++ zu lernen, sowas braucht wesentlich laenger 😉



  • Hallo,

    trequ schrieb:

    Ich hab mir bei Amazon ein paar Bücher zu dem Thema bestellt, aber bis die da sind...

    Ein paar? 😮

    Vielleicht noch als Tipp: Du solltest dir vielleicht erstmal ein Buch kaufen, und zwar das, was Blue-Tiger vorgeschlagen hat (oder eben online lesen). Wenn du dir jetzt 3 Bücher bestellt hast, nützen dir 2 wohl erstmal gar nix. Ich denke, ein Buch + Tutorial + Forum ist ne gute Kombination für den Anfang.



  • Ich bestelle auch oft mehrere Bücher auf einmal, so spart man Versandkosten 🙂

    Also beim MSVC++ bekommste bei nem Konsolenprojekt 3Dateien angelegt in eine schreibt er dir die ersten Zeilen eines jeden Programmes, allerdings auf MSVC++ zugeschnitten und nicht Standardkonform, dafür ist es so aber kompatibel zum UNICODE

    // Testaa.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    

    Sowie eine stdafx.cpp und eine stdafx.h diese kannst du ignorieren für den Anfang (die sind notwendig für vorkompilierte Headerdateien das spart dir Zeit beim kompilieren, aber für den Anfang brauchst das nicht).


Log in to reply