Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Przeciążanie operatora +

Ostatnio zmodyfikowano 2013-05-06 18:55
Autor Wiadomość
cryuff
Temat założony przez niniejszego użytkownika
[C++] Przeciążanie operatora +
» 2013-05-06 17:21:47
Muszę napisać klasę string, nie działa mi operator +, mógłby mi ktoś pomóc dostrzec błąd?
Poza tym po co w klasie strong deklarować stałą,np static xaxa?
C/C++
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

class stringg
{
    char * p;
    int n;
   
   
public:
    stringg( void )
    {
        p = new char[ 81 ];
        p[ 0 ] = 0;
        n = 80;
        cout << "Konstruktor Domniemany" << endl;
    }
    stringg( int s )
    {
        p = new char[ s + 1 ];
        p[ 0 ] = 0;
        n = s;
        cout << "Konstruktor jednoargumentowy" << endl;
    }
   
    stringg( char * k )
    {
        n =( int ) strlen( k );
        p = new char[ n + 1 ];
        strcpy( p, k );
        cout << "Operator Konwersji" << endl;
    }
   
    stringg( stringg & str )
   
    {
        n = str.n;
        p = new char[ n + 1 ];
        strcpy( p, str.p );
        cout << "konstruktor kopiujacy" << endl;
       
    }
   
   
    ~stringg()
    {
        delete[] p;
        cout << "Uzywam";
    }
   
    void przypisanie( char * str )
    {
        strcpy( p, str );
        n =( int ) strlen( str );
    }
   
    int dlugosc()
    { return( n ); }
   
    void wypisz()
    {
        cout << p;
    }
   
   
    friend stringg operator +( const stringg str1, const stringg str2 );
   
   
};


stringg operator +( const stringg str1, const stringg str2 )
{
    stringg temp( str1.n + str2.n );
    temp.przypisanie( strcpy( temp.p, str1.p ) );
    temp.przypisanie( strcat( temp.p, str2.p ) );
    return temp;
}

int main()
{
    stringg a;
    a.przypisanie( "tak" );
    stringg b;
    b.przypisanie( "nie" );
    stringg c;
    a.wypisz();
    c = a + b;
    c.wypisz();
    getchar();
    return 0;
}
P-82200
pekfos
» 2013-05-06 17:29:50
Skąd wiesz, że to operator+ nie działa? Sprawdzałeś tak:
C/C++
( a + b ).wypisz(); //?

C/C++
temp.przypisanie( strcpy( temp.p, str1.p ) );
temp.przypisanie( strcat( temp.p, str2.p ) );
Po co tu te "przypisanie"?
P-82201
cryuff
Temat założony przez niniejszego użytkownika
» 2013-05-06 17:32:25
To mógłbyś napisać dlaczego z takim zapisem w main jak ja stosuję się wysypuje?
P-82202
pekfos
» 2013-05-06 17:34:21
Nie masz prawidłowego operatora przypisania.
P-82203
cryuff
Temat założony przez niniejszego użytkownika
» 2013-05-06 18:32:38


C/C++
stringg operator -( stringg & a, stringg & b )
{
    stringg temp;
    int n;
    n = a.dlugosc();
    char * wynik = strstr( a.p, b.p );
    cout << endl;
    cout <<& wynik << endl;
    for( int i = 0; i < n; i++ )
    { temp.p[ i ] = a.p[ i ];
        if( a.p[ i ] =* wynik )
             break;
       
    }
   
    return temp;
};

Chciałbym aby w przypadku kiedy za a podstawię "TAKNIE"
a za b "NIE:, aby zwracało słowo "TAK"

Nie wiem jak zrobić żeby to śmigało.
P-82212
akwes
» 2013-05-06 18:55:03
Zastanów się, czy instrukcja "-" ma sens.

O ile wydaje się to logiczne w postaci: TAKNIE - NIE = TAK to co w przypadku NIETAK - NIE? TAKNIETAK - NIE? NIENIE - NIE (wynikiem będzie 0? czy NIE?) oraz co w przypadku "ALA - NIE = ?" bo jeżeli ALA - NIE to ALA, to wtedy ALA + NIE też musi być ALA. Inaczej operatory będą robić dużo bałaganu w wyrażeniach string a = b - c + a.

Nie próbuj przeładować wszystkich operatorów na siłę, rób to wtedy kiedy działanie operatora jest wyczuwalne intuicyjne.
P-82216
« 1 »
  Strona 1 z 1