Akcesory w klasie

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 :)

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.

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 :)

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.

0

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

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