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

Przeciążanie operatów dla klasy obiektów z tablicami

Ostatnio zmodyfikowano 2015-03-31 14:42
Autor Wiadomość
NXVII
Temat założony przez niniejszego użytkownika
Przeciążanie operatów dla klasy obiektów z tablicami
» 2015-03-31 02:10:05
Witam, mam problem z przeciążeniem operatora sumy dla 2 obiektów będących tablicami liczb całkowitych. Dodawanie powinno działać tak żeby sumowało odpowiadające sobie elementy dwóch tablic  i wpisywało wyniki do tablicy trzeciego obiektu (np. a.tab[1] + b.tab[1] = c.tab[1]). Próbowałem użyć do tego pętli sumującej po kolei wszystkie odpowiadające sobie elementy ale nie wiem jak mógłbym odnieść się do obiektu do którego mają być wpisywane wyniki. Dopiero co zaczynam uczyć się programowania obiektowego i nie wiem jak sobie z tym poradzić, bardzo proszę o pomoc.

dołączam swój kod:


C/C++
#include <iostream>

using namespace std;

class Pudelko
{
private:
    int * tab;
   
public:
    int licznik; //licznik elementow tablicy
   
    Pudelko( int a ) //konstruktor
    {
        licznik = a;
        tab = new int[ a ];
    }
   
    void wpisywanie() //wpisywanie do tabeli
    {
        for( int i = 0; i < licznik; i++ )
        {
            cout << "Podaj " << i + 1 << " wyraz" << endl;
            cin >> tab[ i ];
        }
       
    }
   
    void wypisywanie()
    {
        for( int i = 0; i < licznik; i++ )
        {
            cout << "Wyraz " << i + 1 << ". to: " << tab[ i ] << endl;
        }
        cout << endl;
       
    }
   
    Pudelko operator +( const Pudelko & n )
    {
       
       
        for( int i = 0; i < licznik; i++ )
        {
            n.tab[ i ] + this->tab[ i ]; //???????????????????
        }
       
    }
   
    ~Pudelko() //destruktor
    {
        delete[] tab;
        tab = 0;
    }
   
};


int main()
{
    int a = 2;
    Pudelko k( a );
    k.wpisywanie();
    k.wypisywanie();
   
    Pudelko j( a );
    j.wpisywanie();
    j.wypisywanie();
   
    Pudelko g( a );
    g = j + k;
    cout << "po dodaniu" << endl;
    g.wypisywanie();
   
   
   
   
    return 0;
}
P-129608
darko202
» 2015-03-31 10:29:03
1. przeczytaj
http://cpp0x.pl/artykuly/?id=15
http://cpp0x.pl/kursy​/Programowanie-obiektowe-C++​/Podstawy/Operatory/498


2. przy dodawaniu trzeba pamiętać, że  obiekty mają tablice dynamiczne i jeśli mamy :
o1 ( //tablica 5 elementowa)
o2 ( //tablica 11 elementowa)
to odwoływalibyśmy się do nieistniejących elementów np. o1.tab[ 5]  
dlatego trzeba to w rozwiązaniu uwzględnić
przy (np. a.tab[ i] + b.tab[ i] = c.tab[ i])   

3
nie jestem pewny, ale chyba tak mogła wyglądać metoda operatora +
C/C++
Pudelko operator +( const Pudelko & o )
{
   
    int ktory = 1;
    if( this.licznik < o.licznik )
         ktory = 0;
   
    int ileMax =( ktory ? this.licznik: o.licznik );
    int ileMin =( !ktory > o.licznik ? this.licznik: o.licznik );
   
    {
        Pudelko temp = new int[ ileMax ];
       
        for( int i = 0; i < licznik; i++ )
        {
            if( i < ileMin )
                 temp.tab[ i ] = o.tab[ i ] + this->tab[ i ];
            else
            if( ktory )
                 temp.tab[ i ] = this.tab[ i ];
            else
                 temp.tab[ i ] = o..tab[ i ];
           
        }
       
        return temp;
    }
}

podobnie
Pudelko operator +( Pudelko & l, Pudelko & p );
P-129610
NXVII
Temat założony przez niniejszego użytkownika
» 2015-03-31 14:42:22
Dzięki wielkie, właśnie o to mi chodziło. Wpadłem wcześniej na pomysł z tym tymczasowym obiektem ale nie widziałem jak to zapisać i wychodzi na to, że za szybko się poddałem ;)
P-129625
« 1 »
  Strona 1 z 1