[C++] Przeciążanie operatora +
Ostatnio zmodyfikowano 2013-05-06 18:55
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? #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; }
|
|
pekfos |
» 2013-05-06 17:29:50 Skąd wiesz, że to operator+ nie działa? Sprawdzałeś tak: temp.przypisanie( strcpy( temp.p, str1.p ) ); temp.przypisanie( strcat( temp.p, str2.p ) ); Po co tu te "przypisanie"? |
|
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? |
|
pekfos |
» 2013-05-06 17:34:21 Nie masz prawidłowego operatora przypisania. |
|
cryuff Temat założony przez niniejszego użytkownika |
» 2013-05-06 18:32:38 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. |
|
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. |
|
« 1 » |