Advertisement
Guest User

dd

a guest
Dec 15th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <string>
  4. #include <typeinfo>
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10. class Widget {
  11.  
  12. private:
  13. int id;
  14. static int globalId;
  15.  
  16. protected:
  17. string name;
  18.  
  19. public:
  20. int getWidgetId(){
  21. return id;
  22. }
  23. string getWidgetName() {
  24. return name;
  25. }
  26. void setWidgetName(string name) {
  27. this->name = name;
  28. }
  29.  
  30. void wypisz() {
  31. cout << "Class name: Widget" << endl;
  32. cout << "Id: " << id << endl;
  33. cout << "Object name: " << name << endl;
  34. }
  35.  
  36. Widget() {
  37. this->id = globalId;
  38. Widget::globalId++;
  39.  
  40. cout << "Class name: Widget created" << endl;
  41. }
  42.  
  43. Widget(string name) {
  44. this->name = name;
  45. this->id = Widget::globalId;
  46. Widget::globalId++;
  47.  
  48. cout << "Class name: Widget created" << endl;
  49. }
  50.  
  51. ~Widget(){
  52. cout << "Class name: Widget destroyed" << endl;
  53. }
  54. };
  55.  
  56. // !!! Inicjalizacja statycznej zmiennej
  57. int Widget::globalId = 0;
  58.  
  59. class TextBox : public Widget {
  60. // Tak dlugo jak nie jestesmy na koncu hierarchii dziedziczenia pola powinny raczej byc protected, w razie gdyby powstala klasa dziedziczaca po tej. O ile taka klasa powinna miec dostep do tego pola. Jezeli jestesmy pewni ze takie pole powinno byc dostepne tylko i wylacznie w tej klasie, nawet nie w jej dziecku, to powinno byc private. Nigdy nie wiadomo czy nie bedzie trzeba utworzyc takiego dziecka.
  61. protected:
  62. string text;
  63. public:
  64. string getText() {
  65. return text;
  66. }
  67.  
  68. void setText(string text) {
  69. this->text = text;
  70. }
  71.  
  72. void wypisz() {
  73. Widget::wypisz(); // wypisuje rodzica
  74. cout << "Text: " << text << endl; // wypisuje dodatkowe informacje z tej klasy
  75. }
  76.  
  77. TextBox() {
  78. cout << "Class name: TextBox created" << endl;
  79. }
  80.  
  81. ~TextBox() {
  82. cout << "Class name: TextBox destroyed" << endl;
  83. }
  84.  
  85. };
  86.  
  87. class Slider : public Widget{
  88. protected:
  89. int zakres;
  90. int wartosc;
  91.  
  92. public:
  93. int getZakres() {
  94. return zakres;
  95. }
  96. int getWartosc() {
  97. return wartosc;
  98. }
  99.  
  100. void setZakres(int zakres) {
  101. this->zakres = zakres;
  102. }
  103.  
  104. void setWartosc(int wartosc) {
  105. this->wartosc = wartosc;
  106. }
  107.  
  108. void wypisz() {
  109. Widget::wypisz(); // wypisuje rodzica
  110. cout << "Zakres: " << zakres << endl; // wypisuje dodatkowe informacje z tej klasy
  111. cout << "Wartosc: " << wartosc << endl;
  112. }
  113.  
  114. Slider() {
  115. cout << "Class name: Slider created" << endl;
  116. }
  117.  
  118. ~Slider() {
  119. cout << "Class name: Slider destroyed" << endl;
  120. }
  121.  
  122. };
  123.  
  124. class PasswordTextBox : public TextBox {
  125. private:
  126. char znakMaska;
  127.  
  128. public:
  129. PasswordTextBox() {
  130. cout << "Class name: PasswordTextBox created" << endl;
  131. }
  132.  
  133. ~PasswordTextBox() {
  134. cout << "Class name: PasswordTextBox destroyed" << endl;
  135. }
  136. };
  137.  
  138. int main()
  139. {
  140.  
  141. Widget widget("W1");
  142. widget.wypisz();
  143. cout << endl;
  144.  
  145. TextBox textBox;
  146. textBox.wypisz();
  147. cout << endl;
  148.  
  149. PasswordTextBox pwTextBox;
  150. pwTextBox.wypisz();
  151. cout << endl;
  152.  
  153. Slider slider;
  154. slider.wypisz();
  155. cout << endl;
  156.  
  157. //Widget* tab[7];
  158. Widget **tab = new Widget*[7];
  159. // Niby to to samo co wyzej, mamy tablice dynamiczna wskaznikow, ALE
  160. // W pierwszym przypadku wszystkie 7 elementow dostaje juz adres pamieci
  161. // W drugim przypadku adresy nie sa jeszcze przypisane, dlatego gdybysmy
  162. // uzyli pierwszego sposobu na inicjalizacje tablicy, dodali np 2 elementy pod [0] i [1]
  163. // i w petli od 0 do 7 zrobili: tab[i]->wypisz() to program moze cos odwalic
  164. // dlatego ze tablica jeszcze nie ma adresow i probujesz na nieistniejacym adresie
  165. // wywolac metode "wypisz()"
  166.  
  167. // Odkomentuj ponizszy kod i sprawdz jakie wypisze adresy
  168. // Potem zakomentuj moja inicjalizacje tablicy Widget i odkomentuj Twoja i zas sprawdz
  169. // W przypadku mojego sposobu niewpisane do tablicy elementy beda wypisane jako ZERO,
  170. // ale rzeczywiscie beda NULLAMI
  171. // Potem jest zadanie ze trzeba wypisac wszystkie elementy i przy mojej inicjalizacji
  172. // bedziesz mogla sprawdzic czy adres jest nullem, jesli nie to mozesz wypisac na ekran
  173. // i nic sie nie wydupi
  174.  
  175. /* cout << "ADRESY" << endl;
  176. tab[0] = new Widget("a"); // Tworzymy sobie jeden obiekt zeby byl w tablicy;
  177. for(int i = 0; i < 7; i++) {
  178. cout << tab[i] << endl ;
  179. }
  180. cout << "KONIEC ADRESOW" << endl << endl;
  181. */
  182.  
  183.  
  184. cout << "Wstawianie --- " << endl;
  185. tab[0] = &widget;
  186. tab[1] = &textBox;
  187. tab[2] = &slider;
  188.  
  189. for(int i = 0; i < 7; i++) {
  190. // tu jest to sprawdzenie, jak zostawisz twoja inicjalizacje tablicy to cos sie popierdoli
  191. if (tab[i] != NULL) {
  192. tab[i]->wypisz();
  193. cout << endl;
  194. }
  195. }
  196. // metody wypisz() uzyte w petli to implementacja metody z klasy Widget, dlatego nie wypisuje ona np tekstu z klasy TextBox ktora jest nadpisana zeby dodawala cos wiecej
  197.  
  198. cout << "Program end" << endl;
  199. // ZAD 4
  200. // Konstruktory wywoluja sie od najstarszego do najmlodszego, czyli od najwyzszej klasy bazowej, u nas Widget, do najnizszej, PasswordTextBox
  201. // Destruktory na odwrot, najpierw usunie sie PasswordTextBox, potem TextBox potem Widget
  202.  
  203.  
  204. return 0;
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement