Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Methode einer Klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.09.2008, 12:54 Uhr
Ollom



Ich habe noch mal ne Klausuraufgabe bei der ich nicht weiß was ich antworten soll.

Welche Wirkung hat die Methode in der Klasse CString?


C++:

class CString{ char *z; public:
void Methode(int p1, char p2)
{char p; z = new char [p1+1]; *(z+1+p1) = ’\0’;
if((p2 >= ’a’) && (p2 <= ’z’) p = ’a’; else p = ’0’;
for (int i=0; i<p1; i++) *(z+i) = p + rand()%10;}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.09.2008, 14:38 Uhr
Ollom



Ich habe auch schon mitbekommen das das Prog im visual studio zu fehlern führt, allerding kriege ich auch nicht raus wesshalb.
1.error C2017: Ungültige Escapesequenz Zeile 8
2.error C2958: für das linke Trennzeichen Klammer "(" an der Stelle (Zeile 10) gibt es keine Entsprechung
3.fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in (Zeile 11) gefunden wurde
zu 3. Ich habe schon bemerkt das eine } klammer fehlt aber wo?

Dieser Post wurde am 19.09.2008 um 14:39 Uhr von Ollom editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.09.2008, 14:58 Uhr
CppProgrammer



Du solltest deinen Code immer erst einmal gescheit formatieren, sodass man ihn wenigstens richtig lesen kann.

Der Haufen, den du hier gepostet hast, ist wie bereits erwähnt total unübersichtlich, und weist außerdem auch noch einige syntaktische Fehler auf.
Selbstverständlich führt das dazu, dass man den Code so nicht kompilieren kann.

Ich hab das ganze mal schnell korrigiert:

C++:
class CString
{
    char *z;
public:
    void Methode(int p1, char p2){
        char p;
        z = new char[p1+1];
        *(z+1+p1) = '\0';
        if((p2 >= 'a') && (p2 <= 'z'))
            p = 'a';
        else
            p = '0';
        for(int i=0; i<p1; i++)
            *(z+i) = p + rand()%10;
    }
};



Die Wirkung, welche die Funktion "Methode" hat, beschränkt sich darauf, dass einfach nur Speicher dynamisch allokiert und dem char Pointer z zugewiesen wird.

Im weiteren Verlauf wird dann in diesem Speicher auch noch einiges manipuliert.

Dieser Post wurde am 19.09.2008 um 14:59 Uhr von CppProgrammer editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.09.2008, 18:54 Uhr
xXx
Devil


Hm?
Erst wird p1 + 1 speicher reserviert aufm heap (+1 für die Nullterminierung). Dann wird die Nullterminierung eingefügt ... umständlich ... und dann weißt die Funktion entweder Buchstaben ('a' ... 'j') oder Zahlen ('0' ... '9') zu, je nachdem ob p2 'a' ... 'z' ist, oder nicht.


C++:
#include <cctype>
#include <functional>
#include <algortihm>

class CString
{
    char* m_data;

public:
    void Methode(const std::size_t length, const char value_range)
    {
        m_data = new char[length + 1];
        m_data[length] = 0;

        const char start_range((std::isalpha(value_range) && std::islower(value_range)) ? 'a' : '0');
        std::generate(m_data, m_data + length, std::rand() % 10);
        std::transform(m_data, m_data + length, m_data, std::bind1st(std::plus<char>(), start_range));
    }
};
so einmal c++-style :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.09.2008, 22:50 Uhr
ao

(Operator)


Außerdem frisst die Methode Speicher, denn die mit new geholten Bytes werden nirgendwo wieder freigegeben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.09.2008, 00:41 Uhr
xXx
Devil


Nja in dem Beispiel fehlt der Desturktor, ja. Und es wird nicht geguckt ob m_data schon aufn Array zeigt ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.09.2008, 02:12 Uhr
0xdeadbeef
Gott
(Operator)


Außerdem fehlt der Konstruktor, der Name der Klasse ist ziemlich seltsam gewählt (man erwartet eine String-Klasse), kollidiert mit einer häufig benutzten Bibliothek, und man könnte auch gleich std::string statt eines char-Arrays benutzen und sich den ganzen Speicher-Aufriss sparen - ihr wisst schon, halt C++-Code schreiben.

Aber man kann sich ja an einer Lehranstalt nicht mit guter Programmierpraxis beschäftigen.

Übrigens, @xXx - std::isalpha und std::islower aus <cctype> sind im Grunde C-Reliquien. Es ist eigentlich schöner, die Varianten aus <locale> zu benutzen, die zusätzlich noch ein std::locale-Objekt als Parameter fressen. Dank Default-Parametern muss das von außen nicht mal groß anders aussehen, es ermöglicht allerdings flexibleres Verhalten und ist ggf. (wenn man denn die locale mal wechseln will) threadsicher.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.09.2008, 02:53 Uhr
xXx
Devil


hm ja ich weiß das es eigtl. mit use_facet usw. geht. Doch darin bin ich nicht wirklich 100% fit. Kannst du dazu ne gute Lektüre empfehlen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.09.2008, 09:02 Uhr
ao

(Operator)



Zitat von Ollom:
Ich habe noch mal ne Klausuraufgabe ...

Sind die Quelltexte eigentlich original so grausam formatiert? Oder schreibst du die so ab?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.09.2008, 13:35 Uhr
Ollom



Das ist alles orginal so formuliert, und für jemanden der Elektrotechnik studiert und das nur ein semester lang hat verdammt kompliziert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: