[C/C++] C++ Kopierkonstruktor

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von frankred, 30. Mai 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 30. Mai 2010
    C++ Kopierkonstruktor

    Hi Leute, sitze momentan gerade an einer C++ Aufgabe. Wir sollen ein String Objekt schreiben. Nun möchte ich den "<<" Operator überschreiben. Da ich in dieser Methode das String Objekt mit "const" übergebe darf ich auch keine Methoden auf diesem Objekt ausführen. Will den Char Array im String Objekt aber natürlich in den ostream schreiben. Deswegen will ich über den Kopierkonstruktor das Objekt kopieren, damit ich über das CharArray iterieren kann. Mein Problem ist jetzt ich weiß nicht wie ich anhand des Zeigers auf ein CharArray diesen CharArray kopieren kann.
    Code:
    strcpy(stringCharPointer,string.stringCharPointer);
    
    Ich weiß auch garnicht ob wir diese Fremdmethode benutzen dürfen.

    Hat jemand eine Idee was da schief läuft bei meinem Code, das Programm hängt sich einfach auf, womöglich gerät es irgendwie in eine Endlosschleife?

    Main.cpp
    Code:
    /*
     * Main.cpp
     *
     * Created on: 29.04.2010
     * Author: frank
     */
    using namespace std;
    #include <iostream>
    #include "String.cpp"
    
    
    ostream& operator<<(ostream& os, const String string){
     String newString = string;
     cout << newString.length();
     return os;
    }
    
    int main(int argc, char **argv) {
     String s1("asdcyyxxxx");
     String s2("Vogelsang");
     s2.append(s1);
    
     cout << s2 << endl;
    }
    
    
    String.h (String Klasse)
    Code:
    #ifndef STRING_H_
    #define STRING_H_
    
    using namespace std;
    #include <iostream>
    
    class String{
     private:
     char* stringCharPointer;
    
     public:
     String(){
     stringCharPointer = "";
     }
    
     String(char quelle[]){
     stringCharPointer = quelle;
     }
    
     String(const String& string){
     strcpy(stringCharPointer,string.stringCharPointer);
     }
    
     char getCharAt(int position){
     return stringCharPointer[position];
     }
    
     void append(String appendString){
     int newSize = this->length() + appendString.length();
     char newString[newSize+1];
    
     // Bisherigen String schreiben
     for(int i = 0; i < this->length(); i++){
     newString[i] = this->getCharAt(i);
     }
     int j = 0;
     // Neuen String anhängen
     for(int i = this->length(); i < newSize; i++){
     newString[i] = appendString.getCharAt(j);
     j++;
     }
     newString[newSize] = '\0';
     stringCharPointer = newString;
     }
    
     int length(){
     int i = 0;
     while(this->getCharAt(i) != '\0'){
     i++;
     }
     return i;
     }
    };
    
    #endif /* STRING_H_ */
    
    
    Danke schonmal im vorraus wer sich vielleicht die Mühe macht undmir hilft
     
  2. 30. Mai 2010
    AW: C++ Kopierkonstruktor

    Das stimmt so nicht. Du kannst ohne Probleme Funktionen aufrufen, diese dürfen das Objekt allerdings nicht verändern und müssen daher auch const sein.

    Deine getChar()-Funktion sowie die length()-Funktion können const sein, da sie ja das Objekt nicht verändern:

    Code:
     char getCharAt(int position) [B]const[/B]{
     return stringCharPointer[position];
     }
    
     int length() [B]const[/B]{
     int i = 0;
     while(this->getCharAt(i) != '\0'){
     i++;
     }
     return i;
     }
     
  3. 30. Mai 2010
    AW: C++ Kopierkonstruktor

    Gehört zwar nicht zum Thema, aber ich würde dir empfehlen genau hier auch mit Try & Catch zu arbeiten. Es gibt einige Stellen die Fehler hervorrufen könnten (speicheradresse[offset] (stringCharPointer[position]), hier könnte ein falscher Offset gravierende Fehler hervorrufen!).
     
  4. 30. Mai 2010
    AW: C++ Kopierkonstruktor

    danke euch zwei, habs jetzt hinbekommen , das mit const wusste ich so nicht ! MERCI!
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.