the Hellboard (http://old.the-hellboard.de/index.php)
- Computer und Co (http://old.the-hellboard.de/board.php?boardid=10)
--- Software (http://old.the-hellboard.de/board.php?boardid=12)
---- Coder Forum (http://old.the-hellboard.de/board.php?boardid=90)
----- cpp: Eigene String-Klasse (http://old.the-hellboard.de/thread.php?threadid=4929)


Geschrieben von stanny am 10.03.2006 um 15:21:

  cpp: Eigene String-Klasse

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
class string {
	public:
		string();
		~string();
		string& operator=(const string &);
		string& operator=(const char[]);
	private:
		char *itsChar;
		int itsSize;
};

string::string():
itsChar(0),itsSize(0)
{ }

string::~string() {
	if (!itsChar == 0)
		delete [] itsChar;
}

string& string::operator=(const string &rhs) {
	itsSize = rhs.itsSize;
	if (!itsChar == 0)
		delete [] itsChar;
	itsChar = new char[itsSize];
	*itsChar = rhs.*itsChar;
	return *this;
}

string& string::operator=(const char str[]) {
	itsSize = sizeof(str);
	if (!itsChar == 0)
		delete [] itsChar;
	itsChar = new char[itsSize];
	*itsChar = str;
	return *this;
}


Ich versuche mir grade selber eine String-Klasse zu schreiben. Allerdings habe ich zwei Probleme, bei denen ich nicht weiß, was daran falsch ist. Mein Kompiler gibt folgende Fehler aus:
code:
1:
2:
3:
4:
strings.cpp: In member function 'string& string::operator=(const string&)':
strings.cpp:26: error: '((string*)this)->string::itsChar' cannot be used as a member pointer, since it is of type 'char*'
strings.cpp: In member function 'string& string::operator=(const char*)':
strings.cpp:35: error: invalid conversion from 'const char*' to 'char'



Geschrieben von MoD3000 am 10.03.2006 um 16:38:

 

Mh. Ich weiss gerad nicht so richtig was ich damit anfangen soll. Ich muss leider wieder lernen, aber hier mal ein Gegenentwurf, der zwar compiliert aber nur Schwachsinn liefert:

Ich hoff das hier http://www.answers.com/topic/const-correctness kann dir weiterhelfen, ich verwende bei mir auch ziemlich komische Dinge. Alles in allem keine gute Idee. Das Gespiele mit Pointern mochte ich noch nie unglücklich



Geschrieben von Ben am 10.03.2006 um 22:43:

 

[Spam]
Gibs zu, Mod, du programmierst nur, weil du die vielen voids so schön findest!
[/Spam]

@stanny: Leider kann ich kein C++. Wofür brauchst du denn eine eigene String-Klasse?



Geschrieben von MoD3000 am 10.03.2006 um 23:20:

 

Frueher[tm] war es mal so, dass die Hauptfunktion durchaus void zurueckgegeben hat.
Das war philosophisch! Jetzt muss leider ein Status zurueckgegeben werden unglücklich

Stanny meint, damit koenne er dynamische Strings erstellen. Das ist aber imho Unsinn, weil z.B. die Klasse String afaik bereits einen += Operator mitbringt.



Geschrieben von Ben am 10.03.2006 um 23:42:

 

In C darfst du das zumindest bei gcc schon noch. Ich habs ja immer gesagt: C++ ist böse großes Grinsen
Ne, bin einfach noch nicht dazu gekommen, es zu lernen.
Allerdings ist C mit Strings schon ziemlich a pain in the a**, Delphi will mich immer davon abhalten, das zu tun, was ich tun muss und kriegt spastische Anfälle, wenn ich mehr als 4 Schleifen ineinander schachtel oder so...
Ich überlege nur noch, ob ich statt C++ nicht lieber irgendwas Richtung Perl, Python oder so.
Aber egal, ich hab eh schon zu wenig Zeit und außerdem ist es OT



Geschrieben von MoD3000 am 11.03.2006 um 00:28:

 

ich bin nie OT und deswegen empfehle ich dir python, ist wirklich eine schoene Art Objektorientiertheit zu lernen.



Geschrieben von stanny am 13.03.2006 um 20:22:

 

Laut Buch, was eigentlich nicht _so_ alt sein sollte, sollte man sich eine eigene String-Klasse schreiben, da die Standard-Library angeblich keine dynamischen Strings zulasse. Will heißen +=-Operator oder generell die Tatsache, dass immer nur so viel Speicher reserviert wird, wie gebraucht wird, nicht vorhanden sein.

Ob das nun stimmt oder nicht, sei mal dahingestellt (es hat mich auch sehr gewundert!), allerdings würde ich trotzdem gerne in der Lage sein. Mit MODs Beispiel kann ich nicht so viel Anfangen, da die Funktion verloren geht. Ich habe es zwar nur überflogen, aber statt neue Wertzuweisungen einzurichten, dürften da massig Speicherlücken hervorgerufen werden. (Ich hab allerdings noch nicht die Zeit gefunden, da wirklich einen Blick raufzuwerfen.)

Schon einmal danke und ich melde mich nochmal mit konkreterer Problembeschreibung.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH