Przeładowanie operatorów parę pytań

Odpowiedz Nowy wątek
2011-04-07 22:01

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Witam!
Chciał bym się dowiedzieć jak do przeładowanego operatora przypisania wpisać stałą wartość, mam taki kawałek kodu:

 //---------------------------------------------------------------------------
class A {
private:
    int a, b;
    const int c;
public:
//----------------------------Konstruktory----------------------------------
    A(void);
    A(const A &wzor);
//----------------------Przeładowanie operatorów----------------------------
    A& operator=(const A &wzor)
};
//---------------------------------------------------------------------------
A::A(const A &wzor) : c(wzor.c)  // tutaj podstawienie w liście inicjalizacyjnej
{                                // działa bez problemu
    a = wzor.a;
    b = wzor.b;
}
//---------------------------------------------------------------------------
A& A::operator=(const A &wzor) //: c(wzor.c) - Niestety taki zapis nie działa!
{
    if (this == &wzor)      //sprawdzam czy nie przypisujemy A = A
        return *this;
    a = wzor.a;
    b = wzor.b;
    return *this;
}
//---------------------------------------------------------------------------

A także mógł by mi ktoś powiedzieć co oznacza słowo const(to na końcu) przy takiej deklaracje:
​T T::operator +(const T& b) const;

Pozostało 580 znaków

2011-04-07 22:07

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

0

Pierwsze: po zainicjalizowaniu stałej nie można jej już zmieniać wartości. W końcu jest "stała". ;)
Drugie: http://www.parashift.com/c++-[...]st-correctness.html#faq-18.10

edit: Lista inicjalizacyjna działa tylko przy konstruktorach, ten kopiujący możesz napisać tak:

A::A(const A &wzor) : a(wzor.a), b(wzor.b), c(wzor.c) {}

edytowany 1x, ostatnio: Xupicor, 2011-04-07 22:09
jak się postarasz to da się zmienić wartość stałej, ale należy się za to kara śmierci ;) - byku_guzio 2011-04-08 09:56
złowieszcze const_cast - krwq 2011-04-08 10:25
Dlatego nawet o tym złowieszczym rzutowaniu, którego imienia strach wymawiać nawet szeptem w środku nocy, nie wspominam :P Szczególnie, że czasami można się naciąć i wywalić program w runtime. - Xupicor 2011-04-08 16:13

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0