Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:21

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C/C++ Übung mit Klassen

Discussion on C/C++ Übung mit Klassen within the C/C++ forum part of the Coders Den category.

Reply
 
Old 12/04/2013, 09:57   #16
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
Ja klar jetzt gehts zwar wenn ich die implementierung in main.cpp einfüge.

Jedoch ist das nicht Sinn der Sache! Ich hoffe du kannst jetzt was mit anfangen.

p.s: Das Programm läuft jetzt. Bin fertig. Jedcoh habe ich immer noch Probleme mit dem Linker..

Attached Files
File Type: rar login.rar (1.9 KB, 7 views)
theo1990 is offline  
Old 12/04/2013, 13:26   #17

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
In der Login.cpp definierst du void Login::SetName(char* NewName[]) statt void Login::SetName(char NewName[]).

Da du in C++ Methoden überladen kannst, was heißt, dass Funktionen mit gleichen Namen und unterschiedlichen Parametern existieren können, deklarierst du eine Funktion namens SetName mit dem Parameter NewName vom Typ char[] und definierst eine Funktion namens SetName mit dem Parameter NewName vom Typ char*[] was ein Pointer eines Char-Arrays wäre statt einem Char-Array.

Was dein komisches C/C++ Gemisch sein soll und wieso du C-Header wie stdio.h inkludierst, gehört hier zwar nicht hin, aber dennoch ist das nicht unbedingt die beste Praxis.
Delinquenz is offline  
Thanks
1 User
Old 12/04/2013, 16:56   #18
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
Quote:
Originally Posted by Delinquenz View Post
In der Login.cpp definierst du void Login::SetName(char* NewName[]) statt void Login::SetName(char NewName[]).

Da du in C++ Methoden überladen kannst, was heißt, dass Funktionen mit gleichen Namen und unterschiedlichen Parametern existieren können, deklarierst du eine Funktion namens SetName mit dem Parameter NewName vom Typ char[] und definierst eine Funktion namens SetName mit dem Parameter NewName vom Typ char*[] was ein Pointer eines Char-Arrays wäre statt einem Char-Array.

Was dein komisches C/C++ Gemisch sein soll und wieso du C-Header wie stdio.h inkludierst, gehört hier zwar nicht hin, aber dennoch ist das nicht unbedingt die beste Praxis.
Die Fehler die du mir geschrieben hast sind korrekt, jedoch waren Sie für mich nicht relevant, da die login.cpp die ganze zeit nicht mit compiliert wurde demnach hatte ich dort keien Fehlermeldung erhalten. Ich musste nur in c::b diese dateien (login.h, login.cpp) 2 optionen hinzufügen. Siehe da sie wurden compiliert und mein Fehler war wie weggewischt. War also ein reines c::b problem.

Nun zu meinem unsauberen Code. Da ich eine AUsbildung zum Anwendungsentwickler mache und auf meiner Arbeit rein mit Web development zutun habe, bekomme ich in der Schule 1. veraltetes und 2. unschönes C bzw. C++ beigebracht. Es ist eher ein Mix aus beidem, wie man unschwer erkennen kann. Wir besitzen 3 Lehrer und jeder hat eine andere mentalität was das lernen mit Programmiersprachen betrifft. Egal...jedenfalls danke für eure Hilfe.
theo1990 is offline  
Old 12/05/2013, 12:24   #19
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Ein paar allgemeine Dinge zu deinem Code:

Warum benutzt du hier new? Bei deinem Anwendungsfall hat das Objekt nichts auf dem Heap verloren. Das hat gleich mehrere Gründe. Zum einen hast du ein Speicherleck, da du den Speicher nicht wieder mit delete frei gibst und zum anderen ist das hier ganz einfach unnötig. Leg das Objekt auf den Stack, dann musst du dich gar nicht mehr um den Speicher kümmern.

Benutze keine char-arrays, wenn du strings willst. Dafür gibt es die Klasse std::string im Header <string>. Sobald der Benutzer nämlich mehr als die vorhergesehenen 20 Zeichen eingibt, kommt es zu einem buffer overflow. Bei einem std::string passiert das nicht und er bringt noch gleich einen Haufen anderer Vorteile mit sich.

Das bringt uns dann zum nächsten Punkt, die Benutzereingaben. Die fängt man nicht mit scanf ab. Das ist nicht nur sehr unflexibel, sondern auch noch sehr unsicher (Overflow z.B.). Wenn du es richtig machen möchtest, dann benutze std::cin.

In der GetName Methode erzeugst du undefined behavior. Du legst einen char auf den Stack und gibst dann einen Pointer auf diesen char zurück. Nachdem die Methode jedoch verlassen wird, wird der Stack bereinigt und dein Pointer kann nun auf alles mögliche zeigen.


Mehr fällt mir auf die Schnelle nicht auf, aber das sollte schonmal ausreichen fürs erste.
Nightblizard is offline  
Thanks
1 User
Old 12/05/2013, 12:57   #20
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by Nightblizard View Post
In der GetName Methode erzeugst du undefined behavior. Du legst einen char auf den Stack und gibst dann einen Pointer auf diesen char zurück. Nachdem die Methode jedoch verlassen wird, wird der Stack bereinigt und dein Pointer kann nun auf alles mögliche zeigen.
Um genau zu sein, ist erst die Verwendung des Rückgabewertes undefiniertes Verhalten, weshalb nur in der ersten Version des Quelltextes undefiniertes Verhalten auftritt. Das muss natürlich dennoch geändert werden.
Tasiro is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Signatur + PSD mit guter Übung
11/23/2012 - elite*gold Trading - 6 Replies
http://i2.minus.com/jAPpslvqUDHA5.png
Welche Klassen kann man mit den Klassen von WoW vergleichen?
10/09/2011 - General Gaming Discussion - 30 Replies
Thema sagt eigentl. alles ;)
[B] Kostenlose Signaturen l Übung
07/22/2011 - elite*gold Trading - 10 Replies
Hallo Leute, ich würde gerne wieder etwas üben, darum habt ihr die Chance, dass ich kostenlose Signaturen erstelle. Was ihr machen müsst ? Das Ausfülllen :
Übung macht den Meister
01/31/2011 - Metin2 Private Server - 5 Replies
Hey Epvp Da ich mir nun einen Root gekauft habe.Der Soll Irgendwann ankommen.Habe ich mir überleg. Das ich nicht beim installieren irgendwas falsch machen möchte. Deswegen Meine Frage: Gibt es irgendeine Art die Installation auf meinem Pc "Vorzuüben"? MFG XtReMe.
Kleines Tool zur Übung
12/31/2010 - AutoIt - 3 Replies
Ich hab mal ein bischen mit _Imagesearch rumgespielt und rausgekommen ist ein kleines Tool für das Browsergame Die-Staemme Was macht es? Es erscheint eine Gui in der versch. Buttons sind mit den jeweiligen Gebäuden(nicht alle....) Wenn man auf die Buttons von Gebäude klickt wird nach den Gebäuden auf dem Bildschirm gesucht und raufgeklickt. Bei Symbolen sind die Symbole im Hauptgebäude gemeint.. also wenn man z.b. auf das Symbol Holzfäller klickt wird nach diesem Symbol gesucht und...



All times are GMT +1. The time now is 20:22.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.