logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przeciążanie operatora + dla wskaźników do obiektów w C++

denooky 08 Maj 2005 18:18 1311 2
REKLAMA
  • #1 1473369
    denooky
    Poziom 20  
    Posty: 497
    Pomógł: 3
    Ocena: 26
    Witam! Pod spodem jest kawalek kodu, w ktorym realizowane jest przeciazanie operatora +. W efekcie ma dojsc do "sumowania" klas A i B. Ale mam problem z nieco innym przypadkiem, mianowicie, jak dokonac takiego sumowania jesli obiekty A i B sa deklarowane w taki sposob:

    class macierz *A, *B;

    Czyli inaczej, jak dokonac sumowania przy uzyciu przeciazonego operatora +, ktorego arumentami nie sa obiekty, tak jak w przykladzie ponizej, a wskazniki do tych obiektow. Z gory dziekuje za pomoc. Pozdrawiam!

    class macierz {
    int *tab;
    public:
    macierz * operator+(macierz m);
    };

    macierz * macierz::operator+(macierz m){
    class macierz *tmp;
    tmp=new macierz(m.x,m.y);
    for(int i=0; i<m.x; i++)
    for(int j=0; j<m.y; j++)
    *(tmp->tab+tmp->y*i+j)=*(this->tab+this->y*i+j)+*(m.tab+m.y*i+j);
    return tmp;
    };

    int main() {
    class macierz A,B,*C;
    C=A+B;
    return 0;
    }
  • REKLAMA
  • #2 1475269
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    Wydaje mi się, że taki operator:
    macierz * operator+(macierz m);
    powinien raczej sumować wskaźniki, niż wskazywane elementy.
    Wydaje mi się, że powinieneś stworzyć operator:
    macierz operator+(macierz m); oraz operator =

    Co do kodu:
    int main() {
    class macierz A,B,*C; //tworzysz dwa obiekty typu macierz i jeden wskaznik do takiego obiektu
    C=A+B; //jako wartość wskaznika do obiektu typu macierz podstawiasz sumę dwóch komórek typu macierz

    Powinno raczej być coś w stylu:
    
    int main() {
    int A=1,B=2,*C;
    C=new int;
    *C=A+B;
    cout << *C << endl;
    delete C;
    system("pause");
    return 0;
    }
    
  • #3 1475471
    denooky
    Poziom 20  
    Posty: 497
    Pomógł: 3
    Ocena: 26
    Kod, ktory przedstawilem jest w porzadku, poza tym raczej nie mozna napisac czegos takiego:

    cout << *C << endl;

    gdyz C jest obiektem, co w takim razie mialoby sie wyswietlic?
    Natomiast co do mojego problemu poskutkowalo cos takiego:

    int main() {
    ...
    class macierz *A, *B, *C;
    C=*A+*B;
    ...
    }

    Temat wydaje mi sie byc zamkniety, chyba, ze ktos widzi gdzies jeszcze jakies nieprawidlowosci, wtedy bylbym wdzieczny za ich wytknięcie. Pozdrawiam.
REKLAMA