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

przeciazenie operatora !

Ostatnio zmodyfikowano 2016-02-09 19:57
Autor Wiadomość
zolty13
Temat założony przez niniejszego użytkownika
przeciazenie operatora !
» 2016-02-09 18:23:22
witam robie program z przciazeniem operatora ! i niestety wywala blad:no matching function for call to 'wektor::wektor(double, double)'
może nie za bardzo to rozumiem nwm, ale czytam kurs i wszystko wydaje się w porządku.

C/C++
#include <iostream>

using namespace std;
class wektor
{
public:
    double x, y;
    wektor();
   
    wektor & operator !();
   
    ~wektor()
    { //destruktor
        cout << "Zegnamy";
    };
};
wektor & wektor::operator !( void )
{
    return wektor( -( this->x ), -( this->y ) );
}
//konstruktor
wektor::wektor()
{
    this->x = 0; this->y = 0;
    cout << "Witamy" << endl;
}

int main()
{
    wektor u;
    cout << "[" << u.x << "," << u.y << "]" << endl;
   
   
   
   
    /*Klasa k;
    Klasa x;
    k=x;*/
    return 0;
}
P-144650
Gibas11
» 2016-02-09 18:26:55
Nie masz konstruktora przyjmującego 2 parametry double, domyślam się, że takowy miałby ustawiać kolejno x i y na podane w parametrach wartości, więc napisanie go nie powinno stanowić problemu.
P-144651
zolty13
Temat założony przez niniejszego użytkownika
» 2016-02-09 18:37:51
nawet jak on jest to niestety nie dziala
C/C++
#include <iostream>

using namespace std;

class wektor
{
public:
    double x, y;
    wektor();
    wektor( double x, double y )
    {
        this->x = x;
        this->y = y;
    }
    wektor & operator !(); //operator
   
    ~wektor() //destruktor
    {
        cout << "Zegnamy";
    };
};

wektor & wektor::operator !()
{
    return wektor( -( this->x ), -( this->y ) );
}
//konstruktor
wektor::wektor()
{
    this->x = 0; this->y = 0;
    cout << "Witamy" << endl;
}

int main()
{
    wektor u;
    cout << "[" << u.x << "," << u.y << "]" << endl;
    // !wektor;
   
   
   
    /*Klasa k;
    Klasa x;
    k=x;*/
    return 0;
}[ / cpp ]
P-144652
1aam2am1
» 2016-02-09 18:47:13
Usuń jeszcze referencje w operatorze !
P-144653
zolty13
Temat założony przez niniejszego użytkownika
» 2016-02-09 19:00:35
a fakt i kompiluje a co teraz zrobić żeby dostać z wektora 10 10 przeciwny pisałem
!u; i drukowałem na ekran ale nic :/ przy czym przy negacji tak jakby się tworzyl nowy obiekt bo wypisuje mi tekst z konstruktora "witamy"
i tez kolejne pytanie czemu nie mogę stosować referencji żeby zmieniac ten obiekt?
i jeszcze jedno czy trzeba zawsze robic ten konstruktor dla np 2 argumentow czy domyślny wystarczy?

EDIT doszedłem do tego ze musze zrobić u=!u; pytanie tylko czemu nie można zrobić !u lub be zposrednio przy wypisaniu cout << !u.x;?(zwraca 0 tak jakby to był nieprzeładowany operator) i dalej czemu przy tym zapisie !u tworzy się nowy obiekt (widoczne działanie konstruktora i destruktora)
C/C++
#include <iostream>

using namespace std;
class wektor
{
public:
    double x, y;
    wektor(); //konstrukor
    wektor( double x, double y )
    {
        cout << "Witamy-10" << endl;
        this->x = x;
        this->y = y;
    }
    wektor operator !(); //operator
   
    ~wektor() //destruktor
    {
        cout << "Zegnamy" << endl;
    };
};

wektor wektor::operator !()
{
    return wektor( -( this->x ), -( this->y ) );
}
//konstruktor
wektor::wektor()
{
    this->x = 0; this->y = 0;
    cout << "Witamy-0" << endl;
}

int main()
{
    wektor u( 10, 10 ); wektor v;
    cout << "u[" << u.x << "," << u.y << "]" << endl;
    cout << "v[" << v.x << "," << v.y << "]" << endl;
    !u;
    cout << "u[" << u.x << "," << u.y << "]" << endl;
    cout << "v[" << v.x << "," << v.y << "]" << endl;
    return 0;
}
P-144655
kmlkamilek
» 2016-02-09 19:51:09
Źle trochę myślisz. Przeciążanie operatorów, jest po to, by móc określić jak ma się zachować obiekt, gdy użyjemy jakiegoś operatora.
Pisząc !u.x, używasz operatora negacji, na składowej typu double, a nie na obiekcie.
P-144657
zolty13
Temat założony przez niniejszego użytkownika
dziekuje
» 2016-02-09 19:57:55
faktycznie dzięki trzeb się troche przestawić, lapie się na takich bledach ;) przed chwila się zastanawiałem czemu przy jednym przeciążeniu tworzy się nowy obiekt a przy innym nie i okazało się ze przy rzekazaniu przez wartość (kopia się tworzy wiec się tworzy nowy obiekt-wektor :) ) a przy referencji już nie tworzy się nowy obiekt. Niby nic odkrywcego dla kogos kto robil już wcześniej c++ porządnie jak ja, ale czasem ciężko się przestawić
P-144659
« 1 »
  Strona 1 z 1