2011-02-06 3 views
0

J'ai ce morceau de code:Aide Avec C++ CLASSE Définition

int main() 
{ 
    String s1; // s1 == "" 
    assert(s1.length() == 0); 

    String s2("hi"); // s2 == "hi" 
    assert(s2.length() == 2); 

    cout << "SUCCESS" << endl; 
} 

Et je veux écrire une classe qui traversera et se rendre à la fin « Cout » déclaration.

Jusqu'à présent, tout ce que j'ai est ceci:

#include <iostream> 
#include <cassert> 
#include <string> 

using namespace std; 

class String 
{ 
     int size; 
     char * buffer; 
public: 
     String(); 
     String(const String &); 
     String(const char *); 
     ~String(); 
    int length(); 
}; 

String::String() 
{ 
    buffer = 0; 
} 

String::String(const String &) 
{ 

} 

String::String(const char *) 
{ 
    buffer = 0; 
} 

String::~String() 
{ 
    delete[ ] buffer; 
} 

String::length() 
{ 

} 

Ce que je crois est correct jusqu'à présent, au moins en ce qui concerne la façon dont une classe doit être construit, mais je ne suis pas vraiment sûr ce qui devrait aller à l'intérieur certaines des fonctions membres. Quelqu'un peut-il m'aider ou me montrer un exemple de ce dont j'ai besoin pour que ma classe passe par le programme principal et calcule la taille de la mémoire tampon correcte et lit dans les chaînes de caractères?

Merci d'avance.

+2

Je suppose que cette classe 'String' est juste un exemple à des fins d'apprentissage et pas une ré-invention de 'std :: string' ... vrai? –

+4

Je pense que vous devriez écrire un peu plus de code, et poster à nouveau. Les gens seront beaucoup plus heureux de corriger vos erreurs que d'écrire votre code pour vous. Et vous apprendrez plus de cette façon. – TonyK

Répondre

1

Savez-vous quelque chose sur les pointeurs et les tableaux?

La chaîne est essentiellement un tableau de caractères. Ce que vous devez faire est de toujours allouer la bonne quantité de mémoire en utilisant le nouvel opérateur [], assurez-vous qu'il est nettoyé quand il est censé être (vous l'avez bien fait, l'opérateur delete [] est la bonne) mettez là le contenu que vous voulez. Les constructeurs de copie doivent parcourir le caractère passé * (qu'il s'agisse du paramètre ou d'un caractère interne * dans un autre objet String - c'est pareil) et faire une copie du contenu.

En C++, il est courant d'utiliser des "chaînes terminées nulles", ce qui signifie que chaque caractère char * a un 0 (caractère binaire, pas caractère ASCII 0) à la fin. Une fonction dont vous aurez probablement besoin est strlen - elle renvoie la longueur de la chaîne passée dans l'argument (par chaîne je veux dire char * bien sûr)