Cocatenare siruri prin supraincarcarea operatorului +

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++

Cocatenare siruri prin supraincarcarea operatorului +

Mesajde stelian_2681 » 05 Aug 2016, 08:47

In urmatorul cod am incercat concatenarea a doua siruri prin supraincarcarea operatorului +.
Dar nu imi este afisat sirul concatenat.
Imi puteti spune de ce ?


Cod: Selectaţi tot
#include <iostream>
#include <cstring>
using namespace std;

class String
{
private:
    char *sir;
    int size;

public:
    String()
    {
        cout << "\n Default constructor called." << endl;
    }
    String(char *sir)
    {
        cout << "\n Parameter constructor called." << endl;
        size = strlen(sir);
        if (this->sir != NULL)
            delete this->sir;
        this->sir = new char[strlen(sir)+1];
        strcpy(this->sir, sir);
    }
    ~String()
    {
        delete[] sir;
    }
    char* getString()
    {
        return sir;
    }
    int getLength()
    {
        return size;
    }
    String(String& box)
    {
        cout << "\n Copy constructor called." << endl;
        if (box.sir != NULL)
        {
            delete[] sir;
            sir = new char[strlen(sir)+1];
            strcpy(sir, box.sir);
        }
    }
    String& operator= (String& box)
    {
        cout << "\n Assignment operator called." << endl;
        if (box.sir != NULL)
        {
            delete[] sir;
            sir = new char[strlen(sir)+1];
            strcpy(sir, box.sir);
        }
        return *this;
    }
    String& operator+ (String& box)
    {
        cout << "\n Operator+ overload called." << endl;
        String temp;
        size = strlen(sir);
        temp.size = size + box.size;
        temp.sir = new char[temp.size+1];
        strcpy(temp.sir, box.sir);
        strcat(temp.sir, box.sir);
        return temp;
    }
};

int main()
{
    String box1("Geeksforgeeks");
    cout << "\n MyString::box1 " << box1.getString() << endl;
    String box2("GeeksQuiz");
    cout << "\n MyString::box2 " << box2.getString() << endl;
    box2 = box1;
    cout << "\n MyString::box2 " << box2.getString() << endl;
    String box3;
    box3 = box1 + box2;
    cout << "\n MyString::box3 " << box3.getString() << endl;
    return 0;
}
stelian_2681
Junior
Junior
 
Mesaje: 29
Membru din: 24 Iun 2013, 23:25
Judet: Olt

Re: Cocatenare siruri prin supraincarcarea operatorului +

Mesajde Kavarna » 10 Aug 2016, 16:04

Problema e ca returnezi adresa unei variabile locale + operatorul de atribuire nu e supraincarcat chiar corect.
Uite aici tot ce am modificat
Cod: Selectaţi tot
    const String& operator= (const String& box)
    {
        cout << "\n Assignment operator called." << endl;
        if (box.sir != NULL)
        {
            delete[] sir;
            sir = new char[strlen(sir)+1];
            strcpy(sir, box.sir);
        }
        return *this;
    }
    String operator+ (String& box)
    {
        cout << "\n Operator+ overload called." << endl;
        String temp;
        size = strlen(sir);
        temp.size = size + box.size;
        temp.sir = new char[temp.size+1];
        strcpy(temp.sir, box.sir);
        strcat(temp.sir, box.sir);
        return temp;
    }
Kavarna
Junior
Junior
 
Mesaje: 11
Membru din: 20 Sep 2015, 19:14
Judet: Neamţ


Înapoi la Limbajul C++

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron