[C++] Problem z klasa

0

Weźmy przykład klasy liczba zespolona.

class zespolona
{

     double rzeczywista;
     double urojona;

     public :
	pobierzrzeczywista(double a);
	ustawrzeczywista(double a);
	pobierzurojona(double b);
	ustawurojona(double b);	


};


double zespolona :: pobierzrzeczywista(double a)
{

	
return a;
}


void zespolona :: podtsawliczby(double a)
{

	rzeczywista = a;
			


}


double zespolona :: pobierzurojona(double b)
{

	
return b;
}


void zespolona :: ustawurojona(double b)
{

	urojona = b;
			


}


zespolona liczba;

liczba.pobierzrzeczywista(90); 

a dlaczego nie lepiej było by zrobic

 class zespolona
{

     public :	
     double rzeczywista;
     double urojona;
	


};

zespolona liczba;
	liczba.rzeczywista = 90;

Pozdrawiam

0
  1. Ten twój przykład jest bez sensu, bo nie działa ;]
  2. Pytasz czemu warto enkapsulować pola i udostępniać je przez akcesory? Bo wyobraź sobie że możesz mieć troszkę bardziej skomplikowaną klasę, gdzie wartości pewnych pól są ze sobą sprzężone, albo są pewne istotne restrykcje nałożone na te pola. Użytkownik nie musi (a pewnie nawet i nie chce) tego wiedzieć i moze coś po prostu "zepsuć". Wygodniej jest udostępnić użytkownikowi jedynie pewne metody do manipulacji tym czym wolno mu manipulować, które pozwolą mu to robic w sposób prosty i nie wymagający studiowania budowy klasy.
    Wrzucenie wszystkiego w public to trochę tak jakbyś dostał telefon komórkowy bez klawiatury, ekranu etc, czyli sam układ scalony i musiałbyś ręcznie zwierać sobie ścieżki i odczytywać potencjały. Byloby wygodnie? ;)
0

Bo wyobraź sobie że możesz mieć troszkę bardziej skomplikowaną klasę,
Ale to nie jest bardziej skomplikowana klasa, jest to właśnie przykład na uzasadnione pola publiczne.

0
Shalom napisał(a)

Wrzucenie wszystkiego w public to trochę tak jakbyś dostał telefon komórkowy bez klawiatury, ekranu etc, czyli sam układ scalony i musiałbyś ręcznie zwierać sobie ścieżki i odczytywać potencjały. Byloby wygodnie? ;)

ale te pare linijek robi to samo co wyżej te parenascie.

Ja w jednym i drugim przykładzie robie podstawienie pod x.
Rozumiem że są zmienne specjalne, albo nie chcemy żeby ktoś lub coś zmieniało z poza klasy.
Wiec dlaczego do tego przykładu muszę używać hermetyzacji danych??

0

a poza tym w klasie tez moge sobie wstawić deklaracje funkcji

0

Trochę przesadziłem, bo faktycznie w tym konkretnym przykładzie można spokojnie dać public, ale to raczej wyjątek potwierdzający regułę. Wychodzi tu też ograniczenie języka bo taki C# ma properties które załatwiają takie rzeczy.
Chodzi tu jednak o pewne dobre nawyki które warto mieć ;)

0

Wiec dlaczego do tego przykładu muszę używać hermetyzacji danych??
No przecież nie musisz.

0

Załóżmy, że piszemy bibliotekę DLL i na początku "zaoszczędzimy" i zrobimy pole zamiast metody. Z tej biblioteki będą korzystały jakieś programy - nasze, cudze - wszystko jedno. W pewnym momencie okaże się, że jednak pole jest niewystarczające i trzeba jednak zrobić akcesor.
Jaki będzie efekt takiej zmiany? Kod źródłowy każdego programu korzystającego z biblioteki trzeba będzie przerobić.
I teraz pytanie - czy lepiej dodać tych dodatkowych kilka linijek i od razu zrobić porządnie, czy utrudnić sobie życie w przyszłości?

0

W pewnym momencie okaże się,

Jeśli się okaże. W tym wątku mówimy o klasie liczb zespolonych — konkretnym koncepcie matematycznym, w którym nic więcej nie ma prawa się „okazać”. Liczba zespolona opisana jest dwiema liczbami rzeczywistymi. Klasę można rozwinąć o różne funkcje obliczeniowe i operatory — ale dodawanie więcej pól lub robienie z nich złożonych akcesorów oznacza, że nie wiemy co robimy.
Czy int ma jakieś akcesory? Nie, jest tylko wartością. Liczba zespolona to niewiele więcej: typ z założenia całkowicie wartościowy.

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