Akcesory w klasie

Odpowiedz Nowy wątek
2011-10-13 15:26
Ralfi
0

Witam Was bardzo serdecznie. Ostatnio napotkałem fragment kodu, który miał zapewniać dostęp do pól klasy prostokat w taki sposob:

prostokat pro1(1,2);
cout << pro1.a() << ’\t’ << pro1.b() << endl;
pro1.a()=1; pro1.b()=10;
cout << pro1.a() << ’\t’ << pro1.b() << endl;

Bardzo chciałbym się dowiedzieć, w jaki sposób skonstruować metodę np pro1.a(), żeby można było wykonać powyższe instrukcje. Sam nie daję rady, więc proszę Was o pomoc.

Z góry dzięki :)

Pozostało 580 znaków

2011-10-13 17:01
0

Pokaż, co masz, bo skoro nie dajesz rady, to coś tu jest nie tak :> To są podstawy, zatem udowodnij, że cokolwiek robisz sam a nie oczekujesz gotowca.

Pozostało 580 znaków

2011-10-13 17:40
Ralfi
0

Dzięki za zainteresowanie tematem.

Utworzyłem klasę prostokąt:

class prostokat
{
    public:
        prostokat(): prv_a(0), prv_b(0) {} 
        prostokat(int a, int b): prv_a(a), prv_b(b) {} 
        ~prostokat() {}

        inline int a() {return prv_a; }
        inline int b() {return prv_b; }
    private:
        int prv_a, prv_b;
};
prostokat pro1(1,2);
cout << pro1.a() << endl; // to działa
pro1.a() = 23;  // dostaję błąd '=' : left operand must be l-value

Jak przekształcę np. metodę a() w coś takiego:

inline int * a() {return prv_a; } // wywala błąd - cannot convert from 'int' to 'int *

Bardzo proszę o pomoc :)

Pozostało 580 znaków

2011-10-13 18:12
0

zwróć przez referencję:

int& a() {return prv_a; }

jeżeli chcesz, aby działało dla const, musisz dodać również

const int& a() const {return prv_a; }

Tak samo w przypadku drugiego pola.


I fart u die.

Pozostało 580 znaków

2011-10-13 18:34
Ralfi
0

Dziękuję przepięknie kolego, oszczędziłeś mi co najmniej kilka godzin dochodzeń. Wszystkiego najlepszego dla Ciebie :) DZIĘKI PIĘKNE :):)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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