Viele Fragen von einem unerfahrenem Nutzer.
-
Understood schrieb:
Ich bin ein sehr wissbegieriger Nutzer und immer bereit etwas neues zu lernen, aber manchmal komme ich nicht mit. Da ich noch relativ jung, aber trotzdem fest entschlossen bin, an der Programmierung teilzuhaben, verstehe ich kaum die Fachbegriffe die die Bücher von sich geben, die ich bis jetzt besitze.
Ich mag es, wenn man mir es gelassener erklärt.

Hallo Understood,
willkommen im C++-Forum.
Understood schrieb:
1. inline <Rückgabetyp> <Funktionsname>(<Parameter>). Was bedeutet das inline?
Mit 'inline' wird der Compiler aufgefordert, den Code innerhalb der Funktion an die Stelle zu setzen, an dem diese Funktion aufgerufen wird. Ohne inline würde der Code an eine andere Stelle übersetzt und das Programm würde dann von jeder Stelle aus, von der die Funktion aufgerufen wird, dort hin springen.
Understood schrieb:
2. Was ist der Unterschied, wenn ich "int* iX = 5;" und "int iX = 5" schreiben sollte?
int* iX ist ein Pointer (ein Zeiger) auf eine int-Variable. Belegst Du sie mit '5', so heißt das, dass Du an der Adresse 5 ein int ansprechen kannst.
Im Gegensatz dazu belegt int iX=5; eine int Variable mit dem Wert 5.Understood schrieb:
3. Bezieht sich auf Frage 2.:
Welche dieser beiden Möglichkeiten wären in welchem Fall ratsamer?Einen Pointer mit einem festen Wert zu belegen macht normalerweise (z.B. auf einem PC) keinen Sinn. Es kann bei der hardwarenahen Programmieren nötig sein, wenn Du Deine Hardware sehr genau kennst und einzelne Register ansprechen willst. Normal ist int iX=5;.
Understood schrieb:
4. Was bedeutet in einer Klasse das "~Funktionsname"?
Beispiel zur Frage 4.:
Funktions_Name();
~Funktions_Name();Ich unterstelle mal, Du meinst den Klassennamen. Dann ist ~Klassenname der Destruktor, der immer beim Zerstören des Objekts aufgerufen wird.
Understood schrieb:
5. Was bedeutet Vektor/Vector?
Im C++-Standard wird ein vector<> definiert. Das ist ein Container, in dem Daten gleichen Typs sequentiell abgelegt werden können.
Gruß
Werner
-
@drakon:
Abends ist mir immer langweilig und dann programmiere ich gerne etwas schönes.
Momentan programmiere ich mit der von der C++-Sprache entwickelte Skriptsprache "AutoIt". Diese ist wesentlich einfacher, doch sie ist dementsprechend langsamer.
AutoIt war ein guter Einstieg für mich, doch ich programmiere mit AutoIt schon über ein Jahr und es ist immer das Selbe.Langsam wird mir klar, dass C++ viel mehr Möglichkeiten hat, es ist zwar schwierig und es kann auch dauern zu lernen, aber Rom wurde schließlich auch nicht an einem Tag erbaut.

Deshalb versuche ich mich an ein paar mehr oder weniger kleinen Programmen damit ich, wenn ich aus dem Urlaub rauskomme, wieder mit voller Power rangehen kann.
@Werner Salomon:
Danke für Deinen Beitrag und ist auch gut erklärt.@All:
Danke für eure Hilfe, ich werde diesen Thread weiterhin nutzen, sollten mehr Fragen auftreten, ich hoffe das Team von C-PP.de ist damit einverstanden.
-
Neue Fragen im ersten Post hinzugefügt:
6. Was bedeutet folgende Zeile?
(void**)Blubb7. Bezieht sich auf Frage 6.:
Was bedeutet folgende Zeile?(void*)BlubbVielen Dank für Antworten.
Mit freundlichen Grüßen,
Understood.
-
Understood schrieb:
Neue Fragen im ersten Post hinzugefügt:
6. Was bedeutet folgende Zeile?
(void**)Blubb7. Bezieht sich auf Frage 6.:
Was bedeutet folgende Zeile?(void*)BlubbVielen Dank für Antworten.
Mit freundlichen Grüßen,
Understood.Kommt ein bisschen auf den Zusammenhang an. Wenn das so mitten im Quellcode steht (also keine Deklaration von irgendwas), dann sind das Casts im alten C Stil. Und zwar wird Blubb beim ersten Fall in einen void** (zeiger uaf Zeiger auf void) gecasted, und im zweiten Fall zu void* (Zeiger auf void). Ein Cast bedeutet, dass das gecastete Objekt als ein anderer Datentyp aufgefasst wird, als es eigentlich ist. Leider ist bei den Casts im alten C-Stil nicht immer genau klar, was da technisch passiert. Das kann eine recht harmlose Umwandlung sein oder wildeste Reinterpretation des Inhalts von Blubb. Kommt auf den Typ von Blubb an.
-
In welchen Fällen würde das Casten von Variablen ratsam sein, und so wie Du es beschrieben hast, könnte ich auch
(void)Blubbschreiben?
-
Understood schrieb:
In welchen Fällen würde das Casten von Variablen ratsam sein,
Ein bisschen deutet ein Cast fast immer auf einen Fehler hin. Der häufigste legitime Cast ist, wenn man verhindern oder erzwingen will, dass eine bestimmte Überladung einer Funktion benutzt wird, obwohl der Typ eigentlich nicht passt, zum Beispiel einen Integer in einen Fließkommatyp casten, weil man im folgenden mit Fließkommazahlen weiterrechnen will, beziehungsweise umgekehrt.
Es kommt auch manchmal im Zusammenhang mit Polymorphie vor, in C++ spricht man dann von einem dynamic_cast (brauche ich selber aber selten bis nie).
Diese beiden Arten zu casten sind relativ harmlos.
Dann gibt es noch zwei andere Casttypen, wo die Alarmglocken läuten wenn man sie benutzt. Diese sind technischer Natur und man sagt da dem Compiler, dass man etwas besser weiß als er und dass er gefälligst das Maul halten soll und keinen Felher generieren will. Mit diesen Arten von Casts kann man die constness von Objekten entfernen oder den Speicherbereich den Objekte belegen als einen ganz anderen Objekttyp auffassen als ursprünglich gedacht.
Wenn man dies benutzt sollte man aber ganz genau wissen, was man tut!und so wie Du es beschrieben hast, könnte ich auch
(void)Blubbschreiben?
Nein, denn von void kann es keine Instanzen geben.
-
Danke, SeppJ, dass wäre vorerst alles.
Sollten weitere Fragen auftreten werde ich diese hier hineinposten.
Mit freundlichen Grüßen,
Understood.
-
SeppJ schrieb:
und so wie Du es beschrieben hast, könnte ich auch
(void)Blubbschreiben?
Nein, denn von void kann es keine Instanzen geben.
Das stimmt nicht. C++ erlaubt das Casten nach
voidvon beliebigen Typen. Diese Sonderregel findet vor allem in Makros wieassertAnwendung.Static cast, §5.2.9/4 schrieb:
Any expression can be explicitly converted to type “cv void.” The expression value is discarded.
-
Neue Fragen im ersten Post hinzugefügt.
8. Was bedeutet folgende Zeile?
System::Media::Soundplayer ^player9. Bezieht sich auf Frage 8.:
Warum ist ein Häuschen-Zeichen (^) vor dem player?10. Warum kann ich viele Befehle der folgenden Seite nicht nutzen?
http://msdn.microsoft.com/en-us/library/52cs05fz(v=VS.71).aspxVielen Dank für Antworten.
Mit freundlichen Grüßen,
Understood.
-
Understood schrieb:
Neue Fragen im ersten Post hinzugefügt.
8. Was bedeutet folgende Zeile?
System::Media::Soundplayer ^player9. Bezieht sich auf Frage 8.:
Warum ist ein Häuschen-Zeichen (^) vor dem player?10. Warum kann ich viele Befehle der folgenden Seite nicht nutzen?
http://msdn.microsoft.com/en-us/library/52cs05fz(v=VS.71).aspx3 Fragen, eine Antwort: du programmierst nicht in C++, sondern in C++/CLI.
-
Ad aCTa schrieb:
> inline <Rückgabetyp> <Funktionsname>(<Parameter>). Was bedeutet das inline?
[...]IMHO sollte man das bei einer Erklärung in zwei Aspekte aufteilen:
1. Was ist "Inlining"?
2. Die Rolle von "inline-Funktionen"....wobei ich ausdrücklich betonen will, dass ich mit "inline-Funktion" eine Funktion meine, die entweder mit "inline" dekoriert wurde oder "implizit inline" ist, da sie innerhalb einer Klassendefinition definiert wurde.
Ersteres wurde hier schon erklärt. Das "Inlining" ist Sache des Compilers. Es verändert nicht die Bedeuting eines Programms, da die Optimierung auf Basis der "as-if"-Regel durchgeführt wird.
Der zweite kam hier meiner Meinung nach etwas zu kurz. Die Eigenschaft "inline/non-inline" einer Funktion verändert tatsächlich die Bedeutung des Programms. Der C++ Standard enthält Sonderregeln für inline-Funktionen. Ich verweise mal auf die "one-definition-rule". Diese behandelt nämlich inline-Funktionen anders als non-inline-Funktionen. Inline-Funktionen dürfen mehrfach definiert werden, solange nur maximal eine Definition innerhalb einer Übersetzungseinheit auftaucht und diese Mehrfachdefinitionen "äquivalent" sind. Eine weitere Regel besagt, dass wenn eine inline-Funktionen in einer ÜE benutzt wird, diese ÜE auch eine Definition dieser Funktion enthalten muss. Wenn man sich an diese Regeln hält, sollte es klar sein, dass ein Compiler es leichter hat eine inline-Funktion tatsächlich zu "inlinen"; denn auch wenn der Compiler ÜEs separat behandelt, liegen all die nötigen Informationen vor, die der Compiler braucht, um eine inline-Funktion zu "inlinen" zu können.
Ob ein Compiler tatsächlich dieses "Inlining" durchführt, hängt typischerweise von Optimierungseinstellungen und Heuristiken ab. Ein "inline"-Schlüsselwort braucht diese Entscheidung gar nicht zu beeinflussen (as-if Regel). Aber die Idee ist, dem Compiler damit zu signalisieren, dass man es gerne etwas schneller haben würde an dieser Stelle -- zB wenn die Funktion irgendwo sehr oft in einer zeitkritischen Schleife aufgerufen wird.
kk
-
11. Was bedeutet, wenn man Funktion schreibt und danach beispielsweise ein ": bVariable" macht?
void Function(int Par1, int Par2) : bVariable { ...; }Hoffe Ihr könnt mir helfen

Mit freundlichen Grüßen,
Understood.
-
Das gibt es nicht bei gewöhnlichen Funktionen. Die Schreibweise gibt es nur bei Konstruktoren, da nennt sich das Initialisierungsliste und wie der Name schon sagt initialisiert das Membervariablen mit den angegebenen Parametern. Wwobei du im Beispiel keine hast, was ziemlich sinnlos ist, weil die Member ohnehin Default-initialisiert werden wenn sie nicht in der Initialisierungliste auftauchen.
Es gibt noch eine uralte C Schreibweise für Funktionsparameter die recht ähnlich aussieht, aber ich glaube nicht, dass du die meinst. Die wird soweit ich weiß in C++ (und glaube auch in neuerem C) nicht mehr (offiziell) unterstützt.
-
hausaufgabe?
-
@Understood
Ich hoffe du lernst nicht mit der Schrott DVD von Video2Brain C++, der Typ da lässt ganz vieles einfach weg und scheint auch nicht der große Crack in C++ zu sein. Die 3 DVDs sind noch fast schlimmer als das Buch C++ von A bis Z, was dem Leser bei Hintergrundwissen auch im Regen stehen lässt.Es gibt echt eine menge Schrottbücher zu C++, die meisten eigentlich. Warum das so ist wurde hier auch schon diskutiert.
-
Ich habe ein Video-Tutorial (Einstieg für Anspruchsvolle), dann 2 Bücher - C++ - Lernen und Professionell anwenden und Einstieg in C++.
Das Buch Einstieg in C++ wurde mir von meiner AutoIt-Community empfohlen, C++ - Lernen und Professionell anwenden war letztendlich meine eigene Entscheidung.Das Video-Tutorial wollte ich haben, um immer mal kurz und auf die schnelle etwas erklärt zu bekommen.
Mit freundlichen Grüßen,
Understood.