[c++] Programowanie obiektowe problem z operatorem.

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

[c++] Programowanie obiektowe problem z operatorem.

Post autor: Chungu »

Witam.
Staram się "ogarnąć" magię klas... i napotkałem pewien, chyba dosyć podstawowy problem.
Otóż chodzi mi żeby przeciążyć operator + w taki sposób żeby "połączył" on napis w jedną całość... Czy byłby ktoś tak dobry i podpowiedział mi jak to zrobić? Wklejam moje żałosne próby (mam nadzieję, że zilustruje to problem jaki chcę rozwiązać).
Oto kod:

Kod: Zaznacz cały

#include <iostream>
#include <cstring>   
#include <cctype>   
using namespace std;

class String {
    char* s_;
public:

    /*Konstruktory*/
    //String();
    String(const char* s);
    //String(const String& s);
   
    String  operator+ (const char* n) const;
    //String  operator+ (const String& s) const;
    //size_t length() const;
   
/*Destruktor*/
    ~String();

};
String::String(const char*s)
{
    cout<<"Dziala konstruktor char*s"<<endl;
    int i;
    for(i=0;s[i]!='\0';i++);
    i++;
    s_=new char[i];
    s_=(char*)s;
}
String::~String()
{
    cout<<"Teraz dziala destruktor"<<endl;
    delete [] s_;
}
String String::operator+(const char*n)const
{
    cout<<"dziala operator +"<<endl;
    int i,j;
    char*ptr;
    for(i=0;n[i]!='\0';i++);
    i++;
    ptr=new char[i];
    cout<<sizeof(s_)<<endl;
    //return
}
int main() {
    using std::cout; using std::endl; using std::boolalpha;

    String s = "Teskt1 " + String("Tekst2 ") + "Tekst3";
 
}
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[c++] Programowanie obiektowe problem z operatorem.

Post autor: kalwi »

No to może zacznę... spróbuj dokończyć. Tutaj trzeba będzie użyć przyjaźni, aby tekst był po lewej, a obiekt po prawej. Zresztą nie wiem po co się męczysz z charami, skoro są stringi.
No i oczywiście miałeś bez sensu zrobiony konstruktor z parametrem.

Kod: Zaznacz cały

#include <iostream>
#include <cstring>   
#include <cctype>   
using namespace std;

class String {
    char* s_;
public:

    /*Konstruktory*/
    //String();
    String(const char* s);
    //String(const String& s);
   
    String  operator+ (const char* n) const;
    //String  operator+ (const String& s) const;
    //size_t length() const;
    void print() {cout << s_;}
/*Destruktor*/
    ~String();

};
String::String(const char*s)
{
    //cout<<"Dziala konstruktor char*s"<<endl;
    int i;
    for(i=0;s[i]!='\0';i++);
    i++;
    s_ = new char[i];
    for(int j = 0; j < i; ++j)
        s_[j] = s[j];
}
String::~String()
{
    //cout<<"Teraz dziala destruktor"<<endl;
    delete [] s_;
}
String String::operator+(const char*n)const
{
   // cout<<"dziala operator +"<<endl;
    return String(strcat(s_, n));
    //return
}

int main() {
    using std::cout; using std::endl; using std::boolalpha;
    String s = String("Teskt1 ") + "Tekst2 ";
    s.print();
    return 0;
}
ODPOWIEDZ