<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.if.pw.edu.pl/~majanik/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php?action=history&amp;feed=atom&amp;title=Przyk%C5%82adowe_zadania_do_Laboratorium_3</id>
		<title>Przykładowe zadania do Laboratorium 3 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?action=history&amp;feed=atom&amp;title=Przyk%C5%82adowe_zadania_do_Laboratorium_3"/>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;action=history"/>
		<updated>2026-04-05T21:04:48Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=199&amp;oldid=prev</id>
		<title>Majanik at 09:42, 23 October 2012</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=199&amp;oldid=prev"/>
				<updated>2012-10-23T09:42:38Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:42, 23 October 2012&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Zadanie przykładowe zawiera elementy poruszane na wykładzie, wiec warto przejrzeć slajdy przed przystąpieniem do pisania programu.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Zadanie przykładowe zawiera elementy poruszane na wykładzie, wiec warto przejrzeć &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[http://www.if.pw.edu.pl/~gos/PO/wyklad2-2012.pdf &lt;/ins&gt;slajdy&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;] &lt;/ins&gt;przed przystąpieniem do pisania programu.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Wstęp ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Wstęp ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=194&amp;oldid=prev</id>
		<title>Majanik: /* 3. Krok trzeci: funkcje zaprzyjaźnione */</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=194&amp;oldid=prev"/>
				<updated>2012-10-15T15:40:14Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;3. Krok trzeci: funkcje zaprzyjaźnione&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 15:40, 15 October 2012&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 135:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 135:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Dodajmy funkcję zaprzyjaznioną z oboma klasami:&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Dodajmy funkcję zaprzyjaznioną z oboma klasami:&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;friend double suma_wydatkow(Pracownik* pracownicy, int n, Samochod* samochody, int m);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;friend double suma_wydatkow(Pracownik* pracownicy, int n, Samochod* samochody, int m);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Przyjmuje tablicę pracowników, ilość pracowników, tablicę samochodów, ilość samochodów.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Przyjmuje tablicę pracowników, ilość pracowników, tablicę samochodów, ilość samochodów.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 144:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 144:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Cena benzyny może byc zmienną globalna programu:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Cena benzyny może byc zmienną globalna programu:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;double cena_benzyny = 5.0;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;double cena_benzyny = 5.0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jako ze zarówno pensja, jak i cechy samochodu sa prywatne, normalna, niezaprzyjazniona funkcja nie mogła by sie do nich dostać. Jeśli jednak klasy zadeklarują przyjazń z taką funkcją, to bedzie mogla ona bez przeszkód wyciagnąć ich prywatne składniki:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jako ze zarówno pensja, jak i cechy samochodu sa prywatne, normalna, niezaprzyjazniona funkcja nie mogła by sie do nich dostać. Jeśli jednak klasy zadeklarują przyjazń z taką funkcją, to bedzie mogla ona bez przeszkód wyciagnąć ich prywatne składniki:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;w kodzie takiej funkcji będziemy mogli użyć np.: pracownicy[i].pensja&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;w kodzie takiej funkcji będziemy mogli użyć np.: pracownicy[i].pensja&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== 4. Krok czwarty: Przesyłanie do funkcji argumentow bedacych obiektami: Przesyłanie przez wartość i przesyłanie przez referencje ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== 4. Krok czwarty: Przesyłanie do funkcji argumentow bedacych obiektami: Przesyłanie przez wartość i przesyłanie przez referencje ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=193&amp;oldid=prev</id>
		<title>Majanik: Created page with &quot;'''''Zadanie 3 - Klasy c.d., funkcje zaprzyjaźnione, domyślne wartości, przeładowanie nazw, przesyłanie do funkcji argumentow bedacych obiektami '''''  Zadanie przykładowe ...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?title=Przyk%C5%82adowe_zadania_do_Laboratorium_3&amp;diff=193&amp;oldid=prev"/>
				<updated>2012-10-15T15:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;Zadanie 3 - Klasy c.d., funkcje zaprzyjaźnione, domyślne wartości, przeładowanie nazw, przesyłanie do funkcji argumentow bedacych obiektami &amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;  Zadanie przykładowe ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''''Zadanie 3 - Klasy c.d., funkcje zaprzyjaźnione, domyślne wartości, przeładowanie nazw, przesyłanie do funkcji argumentow bedacych obiektami&lt;br /&gt;
'''''&lt;br /&gt;
&lt;br /&gt;
Zadanie przykładowe zawiera elementy poruszane na wykładzie, wiec warto przejrzeć slajdy przed przystąpieniem do pisania programu.&lt;br /&gt;
&lt;br /&gt;
== Wstęp ==&lt;br /&gt;
'''Krotki opis pomysłu:'''&lt;br /&gt;
Tworzymy oprogramowanie dla firmy. Firma ma pracowników zajmujących standardowo jedno z trzech stanowisk: informatyk, menadżer albo sprzątaczka. Firma posiada również flotę służbowych samochodów, nieprzyporządkowanych do pracowników. Chcielibyśmy posiadać &amp;quot;bazę danych&amp;quot; zarówno pracowników i samochodów, oraz posiadać łatwą możliwość obliczenia kosztów utrzymania wszystkiego.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Krok pierwszy: tworzenie klas, obiekty typu &amp;quot;string&amp;quot;, wskaźnik &amp;quot;this&amp;quot;, pola prywatne i publiczne ==&lt;br /&gt;
&lt;br /&gt;
Tworzymy potrzebne klasy, umożliwiające dodawanie i wypisywanie zarówno samochodów jak i pracowników.&lt;br /&gt;
&lt;br /&gt;
'''Wskaźnik *this'''&lt;br /&gt;
&lt;br /&gt;
- Mówi: &amp;quot;teraz odwołasz sie do składowej &amp;gt;TEJ&amp;lt; klasy&amp;quot; (w której jesteś)&lt;br /&gt;
&lt;br /&gt;
- Jego używanie nie jest obligatoryjne (przydaje sie, jeśli z jakiegoś powodu chcemy posiadać takie same nazwy dla argumentów funkcji jak i składników klasy)&lt;br /&gt;
&lt;br /&gt;
'''Obiekty string'''&lt;br /&gt;
&lt;br /&gt;
Zamiast tablicy char-ów stosujemy klasę C++: string. Znacznie ułatwia życie, więc korzystanie z niej jest wskazane. Potrzebne dodanie biblioteki &amp;lt;string&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Umożliwia np. łatwe przyrównywanie stringów:&lt;br /&gt;
string a = &amp;quot;aaa&amp;quot;;&lt;br /&gt;
string b = a;&lt;br /&gt;
&lt;br /&gt;
'''Pola prywatne i publiczne:'''&lt;br /&gt;
&lt;br /&gt;
''prywatne: private''&lt;br /&gt;
&lt;br /&gt;
Jest dostępne tylko dla funkcji składowych klasy (i funkcji zaprzyjaźnionych z daną klasą). Czasem chcemy ukryć informacje, by nie były dostępne &amp;quot;na zewnątrz&amp;quot; (jest to powszechna praktyka przy tworzeniu dużych programów).&lt;br /&gt;
Jeśli nie wyszczególnimy etykiety, to wszystkie składniki klasy będą domyślnie prywatne.&lt;br /&gt;
&lt;br /&gt;
''publiczne: public''&lt;br /&gt;
&lt;br /&gt;
Publiczne składniki mogą być używane zarówno we wnętrzu klasy, jak również spoza jej zakresu.&lt;br /&gt;
&lt;br /&gt;
Potrzebne klasy:&lt;br /&gt;
&lt;br /&gt;
'''Klasa Pracownik:'''&lt;br /&gt;
&lt;br /&gt;
pola prywatne:&lt;br /&gt;
&lt;br /&gt;
 string imie;&lt;br /&gt;
 string nazwisko;  &lt;br /&gt;
 int wiek;&lt;br /&gt;
 double pensja;&lt;br /&gt;
 string zawod;&lt;br /&gt;
&lt;br /&gt;
metody publiczne:&lt;br /&gt;
&lt;br /&gt;
 void zapisz(string i, string n, int w, double p, string z);&lt;br /&gt;
 void wypisz();&lt;br /&gt;
&lt;br /&gt;
'''Klasa samochod:'''&lt;br /&gt;
&lt;br /&gt;
pola prywatne:&lt;br /&gt;
&lt;br /&gt;
  rodzaj marka;&lt;br /&gt;
  double spalanie_na_kilometr;&lt;br /&gt;
  double km;&lt;br /&gt;
 &lt;br /&gt;
metody publiczne:&lt;br /&gt;
&lt;br /&gt;
  void zapisz(rodzaj marka, double spalanie_na_kilometr, double km); //uwaga, te same nazwy! żeby moc przyporządkować odpowiednie wartości - użycie wskaźnika this! &amp;quot;this-&amp;gt;km = km;&amp;quot; - przyporządkuje do &amp;lt;składnika klasy km&amp;gt; wartość &amp;lt;argumentu funkcji km&amp;gt;)&lt;br /&gt;
  void wypisz();&lt;br /&gt;
&lt;br /&gt;
By przetestować działanie programu, tworzymy w funkcji main() tablice pracowników i samochodów, oraz tworzymy np. 3 samochody i 3 pracowników. Wypisujemy ich na ekran.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Krok drugi: enum ==&lt;br /&gt;
&lt;br /&gt;
Typy wyliczeniowe: enum. Jest to osobny typ dla wybranego zestawu stałych całkowitych.&lt;br /&gt;
&lt;br /&gt;
Przydaje sie często - np. mamy ograniczana liczbę stanowisk, na jakich może być zatrudniony pracownik (w naszym przypadku: 3). Ale zapamiętywanie każdego zawodu jako &amp;quot;string&amp;quot; nie dość, ze zajmuje niepotrzebna bardzo dużo miejsca, to jeszcze sprzyja generowaniu problemów (np. jeden programista wpisze &amp;quot;Sprzataczka&amp;quot; drugi &amp;quot;sprzataczka&amp;quot;, a trzeci, mający brata pracującego przy sprzątaniu wpisze &amp;quot;sprzatacz&amp;quot;. A wtedy zaczynają sie problemy z porównywaniem składnika &amp;quot;zawod&amp;quot; z jakimś konkretnym słowem...&lt;br /&gt;
Wiec myślimy: skoro mamy trzy zawody, to przypiszmy im numery. Informayk - 1, sprzątaczka - 2, manager - 3. I po problemie. Jednak zapamiętywanie, która cyferka odpowiada jakiemu zawodowi może również generować problemy, chociaż innego rodzaju - w dużych programach mamy tysiące linijek kodu. Wyobraźmy sobie, ze musimy dodać nowa funkcje. A kto będzie pamiętał po tygodniu, czy 3 to była sprzątaczka, czy manager...&lt;br /&gt;
&lt;br /&gt;
Używamy wiec typu wyliczeniowego enum:&lt;br /&gt;
&lt;br /&gt;
Przykład użycia: enum zawod{ informatyk=1, sprzataczka, manager};&lt;br /&gt;
&lt;br /&gt;
W ten sposób, jeśli zadeklarujemy taki typ globalnie, to za każdym razem, jeśli napiszemy w kodzie &amp;quot;manager&amp;quot; to program będzie wiedział, ze chodzi o 3. A jeśli programista próbował by napisać np. &amp;quot;Manager&amp;quot; to od razu kompilator zgłosi błąd.&lt;br /&gt;
Oczywiście powodów użycia typów wyliczeniowych możemy wymyślać dużo więcej.&lt;br /&gt;
&lt;br /&gt;
Zamiast deklarować typu wyliczeniowego globalnie, możemy zrobić to również wewnątrz klasy. Takie postępowanie jest bardzo naturalne - niektóre wyliczenia wiążą sie tylko i wyłącznie z jedną, konkretną klasą. Wtedy możemy zadeklarować:&lt;br /&gt;
&lt;br /&gt;
 class Pracownik{&lt;br /&gt;
  public:&lt;br /&gt;
    enum zawod{ informatyk=1, sprzataczka, menadzer};&lt;br /&gt;
     ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Wtedy wewnątrz składników klasy używamy zwyczajnie slow &amp;quot;informatyk&amp;quot; tak, jakby był to dowolny int.&lt;br /&gt;
&lt;br /&gt;
Na zewnątrz klasy musimy jednak określić, z jakiego zakresu słowo &amp;quot;informatyk&amp;quot; ma pochodzić: Pracownik::informatyk.&lt;br /&gt;
&lt;br /&gt;
Wydawało by sie, ze łatwiej zapamiętać cyfrę 1, niż złożoną konstrukcję &amp;quot;Pracownik::informatyk&amp;quot;. Ale to niekoniecznie prawda - jeśli przeglądamy kod jakiś czas po napisaniu programu i widzimy w nim masę 1, 2 i 3 - to niewiele jesteśmy w stanie z niego przeczytać. Jeśli natomiast mamy w takich miejscach &amp;quot;Pracownik::informatyk&amp;quot; kod staje sie dla nas dużo bardziej czytelny i przejrzysty - jesteśmy w stanie od reki odpowiedzieć na pytanie, czego dokładnie dotyczy dana linijka.&lt;br /&gt;
&lt;br /&gt;
'''Zadanie:'''&lt;br /&gt;
&lt;br /&gt;
- zmodyfikować markę samochodu tak, by była globalnym typem wyliczeniowym (przyjmijmy, ze firma kupuje jedynie ople, mazdy i toyoty).&lt;br /&gt;
&lt;br /&gt;
- zmodyfikować zawód pracownika tak, by był typem wyliczeniowym (informatyk, sprzataczka, manager) w zakresie klasy Pracownik (oczywiście publicznym).&lt;br /&gt;
&lt;br /&gt;
'''Wskazówka:'''&lt;br /&gt;
&lt;br /&gt;
Zamiast:            void zapisz(string i, string n, int w, double p, string z);&lt;br /&gt;
Będziemy mieli:  void zapisz(string i, string n, int w, double p, zawod z);&lt;br /&gt;
&lt;br /&gt;
Zamiast:             flota[0].zapisz(&amp;quot;Opel&amp;quot;,7,200);&lt;br /&gt;
Będziemy mieli:   flota[0].zapisz(Opel,7,200);&lt;br /&gt;
&lt;br /&gt;
Zamiast:             personel[0].zapisz(&amp;quot;Jan&amp;quot;,&amp;quot;Kowalski&amp;quot;,43,1000.0,&amp;quot;informatyk&amp;quot;);&lt;br /&gt;
Będziemy mieli:   personel[0].zapisz(&amp;quot;Jan&amp;quot;,&amp;quot;Kowalski&amp;quot;,43,1000.0,Pracownik::informatyk);&lt;br /&gt;
&lt;br /&gt;
''Sprawdzić czy działa!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3. Krok trzeci: funkcje zaprzyjaźnione ==&lt;br /&gt;
'''Funkcje zaprzyjaźnione''' - funkcje, które mimo, że nie są składnikami klasy maja dostęp do wszystkich (nawet prywatnych i chronionych) składników klasy.&lt;br /&gt;
&lt;br /&gt;
To nie funkcja ma twierdzić, ze przyjaźni sie z klasa, ale sama klasa daje jej dostęp do swoich prywatnych i chronionych składników.&lt;br /&gt;
&lt;br /&gt;
- Funkcja zaprzyjaźniona może być przyjacielem więcej niż jednej klasy!&lt;br /&gt;
&lt;br /&gt;
- Jeśli klasa deklaruje przyjaźń ze wszystkimi funkcjami innej klasy, możemy mieć klasę zaprzyjaźnioną.&lt;br /&gt;
&lt;br /&gt;
- słowo kluczowe: '''friend'''&lt;br /&gt;
&lt;br /&gt;
Dodajmy funkcję zaprzyjaznioną z oboma klasami:  &lt;br /&gt;
&lt;br /&gt;
friend double suma_wydatkow(Pracownik* pracownicy, int n, Samochod* samochody, int m);&lt;br /&gt;
 &lt;br /&gt;
Przyjmuje tablicę pracowników, ilość pracowników, tablicę samochodów, ilość samochodów.&lt;br /&gt;
&lt;br /&gt;
Podlicza cale wydatki firmy: suma pensji pracownikow + wydatki na benzyne (suma spalanie_na_kilometr * km * cena_benzyny)&lt;br /&gt;
oraz zwraca ja poprzez return.&lt;br /&gt;
&lt;br /&gt;
Cena benzyny może byc zmienną globalna programu:&lt;br /&gt;
&lt;br /&gt;
double cena_benzyny = 5.0;&lt;br /&gt;
&lt;br /&gt;
Jako ze zarówno pensja, jak i cechy samochodu sa prywatne, normalna, niezaprzyjazniona funkcja nie mogła by sie do nich dostać. Jeśli jednak klasy zadeklarują przyjazń z taką funkcją, to bedzie mogla ona bez przeszkód wyciagnąć ich prywatne składniki:&lt;br /&gt;
w kodzie takiej funkcji będziemy mogli użyć np.: pracownicy[i].pensja&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Krok czwarty: Przesyłanie do funkcji argumentow bedacych obiektami: Przesyłanie przez wartość i przesyłanie przez referencje ==&lt;br /&gt;
&lt;br /&gt;
'''Przesyłanie przez wartosc'''&lt;br /&gt;
&lt;br /&gt;
- funkcja pracuje na kopii&lt;br /&gt;
&lt;br /&gt;
Jeśli klasa jest spora, zużywamy dużo zasobów na utworzenie kopii. Lecz czasem własnie tego chcemy: wyobraźmy sobie, ze firma ma 5 konkretnych Opli i dokupiła nowy, szósty.&lt;br /&gt;
&lt;br /&gt;
Stworz funkcje Samochod SkopiujSamochod(Samochod a) która zwraca obiekt klasy Samochod, identyczny jak jego kopia z jednym wyjątkiem: chcemy, by liczba kilometrów była wyzerowana.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Przesyłanie przez referencje''' &lt;br /&gt;
&lt;br /&gt;
- funkcja pracuje na oryginale&lt;br /&gt;
&lt;br /&gt;
Wyobraźmy sobie, ze chcemy zmienic ktoryś z parametrów samochodu. Żeby to zrobic odświerzamy cały wpis.&lt;br /&gt;
&lt;br /&gt;
Stworz klase void ZmienSamochod(Samochod &amp;amp;a, rodzaj m, double s, double k)&lt;br /&gt;
która poprawia obiekt a, przypisując mu nowe wartosci: marki - m, spalanie_na_kilometr - s oraz km - k&lt;br /&gt;
Obiekt nie musi byc zwracany na koniec, gdyz pracujemy bezpośrednio na obiekcie podanym jako argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 5. Krok piąty: Domyslne wartosci argumentow funkcji ==&lt;br /&gt;
&lt;br /&gt;
To jest niesamowicie proste i przydatne. Powiedzmy, ze tworząc (zapisując) samochod, zazwyczaj nasza firma kupuje samochody spalajace 7 l/km, a gdy są nowe, to ich przebieg wynosi 0.&lt;br /&gt;
&lt;br /&gt;
''Modyfikujemy:''&lt;br /&gt;
&lt;br /&gt;
  void zapisz(rodzaj marka, double spalanie_na_kilometr, double km)&lt;br /&gt;
Dodając &amp;quot;=&amp;lt;jakaś liczba&amp;gt;&amp;quot; przy argumentach funkcji&lt;br /&gt;
  void zapisz(rodzaj marka, double spalanie_na_kilometr=7, double km=0)&lt;br /&gt;
&lt;br /&gt;
Wtedy w funkcji main jesli tworzymy samochod, mozemy napisać:&lt;br /&gt;
&lt;br /&gt;
zapisz(opel, 7, 0);&lt;br /&gt;
&lt;br /&gt;
albo&lt;br /&gt;
&lt;br /&gt;
zapisz(opel, 7); - wpisalismy jeden argument mniej&lt;br /&gt;
&lt;br /&gt;
albo&lt;br /&gt;
&lt;br /&gt;
zapisz(opel); - wpisalismy dwa argumenty mniej&lt;br /&gt;
&lt;br /&gt;
albo tez zmienic argumenty:&lt;br /&gt;
&lt;br /&gt;
zapisz(opel, 6, 5000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oczywiście, nie muszą być to liczby, tak samo zadziala to z stringiem czy innym typem. Wtedy pamiętamy: najmniej istotne parametry trafiają na koniec, gdyż potem możemy pomijać je tylko od końca - nie moglibyśmy wpisać zapisz(opel, 0) chcąc wyzerować składnik km - bo skąd nasz program ma wiedzieć, że nie chodzi nam o spalanie_na_kilometr? Zawsze będzie przypisywał parametry od początku: pierwszy - pierwszemu, drugi - drugiemu, itd.&lt;br /&gt;
&lt;br /&gt;
Bardzo często i powszechnie stosowane. Zapamiętać!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 6. Krok szósty: Przeładowanie nazw funkcji. ==&lt;br /&gt;
&lt;br /&gt;
-''' nadanie jej wielu znaczeń''', gdyż istnieje kilka różnych funkcji o tej samej nazwie.&lt;br /&gt;
&lt;br /&gt;
Wyobraźmy sobie, ze zamiast &amp;quot;rodzaju&amp;quot; void ZmienSamochod(Samochod &amp;amp;a, rodzaj m, double s=7, double k=0)&lt;br /&gt;
jednak chcielibyśmy mieć możliwość podania stringa (np. gdy użytkownik podaje nazwę z klawiatury, a nie dzieje sie to wewnątrz kodu programu):&lt;br /&gt;
void ZmienSamochod(Samochod &amp;amp;a, string m, double s=7, double k=0).&lt;br /&gt;
&lt;br /&gt;
Jako, że obie funkcje robią dokładnie to samo, chcielibyśmy zachować rownież taką samą nazwę. W C++ można tak zrobic - kompilator sam odkryje, czy podawany przez nas obiekt to integer (enum) czy tez string i bazujac na tej informacji wywoła odpowiednią funkcję.&lt;br /&gt;
&lt;br /&gt;
Dla naszego programu zakładamy, że jedynie te trzy marki samochódow sa dostępne. Chcielibyśmy, żeby funkcja&lt;br /&gt;
void ZmienSamochod(Samochod &amp;amp;a, string m, double s=7, double k=0)&lt;br /&gt;
sprawdzała, czy string m jest == &amp;quot;Opel&amp;quot; albo &amp;quot;opel&amp;quot; i na tej podstawie ustawiała markę samochodu na opel (z enum!). Podobnie dla pozostalych marek.&lt;br /&gt;
a pozostale wartosci przypozadkowala tak samo jak w poprzedniej funkcji.&lt;br /&gt;
&lt;br /&gt;
''Na koniec:''&lt;br /&gt;
&lt;br /&gt;
Podzielić nasz program na oddzielne klasy: główną (main.cpp), dla pracownika (pracownik.cpp, pracownik.h) oraz dla samochodu (samochod.cpp, samochod.h) - uwaga, pewne modyfikacje mogą być konieczne!&lt;br /&gt;
&lt;br /&gt;
'''Informacje dodatkowe: Zaslanianie nazw'''&lt;br /&gt;
- Mozna, ale raczej utrudnia zycie, wiec unikamy.&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	</feed>