Advertisement
Guest User

poli_poprawiony

a guest
Jan 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. // Polimorfizm.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. class Wyjatek {
  7. public:
  8. string powiadomienie;
  9. Wyjatek(string p) {
  10. powiadomienie = p;
  11. }
  12. void rezultat() {
  13. cout << powiadomienie << endl;
  14. }
  15. };
  16.  
  17. class Zero : public Wyjatek {
  18. public:
  19. Zero(string p) :Wyjatek(p) {}
  20. void rezultat() {
  21. Wyjatek::rezultat();
  22. }
  23. };
  24.  
  25. class Mniejszy : public Wyjatek {
  26. public:
  27. Mniejszy(string p) :Wyjatek(p) {}
  28. void rezultat() {
  29. Wyjatek::rezultat();
  30. }
  31. };
  32.  
  33. class Ksztalt {
  34. public:
  35. virtual void obliczPole() = 0;
  36. virtual void obliczObwod() = 0;
  37. };
  38.  
  39. class Kolo : public Ksztalt {
  40. float r;
  41. public:
  42. Kolo(float promien) {
  43. r = promien;
  44. }
  45. void obliczPole() {
  46. if (r == 0) throw new Zero("Promien wynosi 0");
  47. else if (r < 0) throw new Mniejszy("Promien jest mniejszy od 0");
  48. else {
  49. cout << "Pole kola= " << 3.14 * r * r << endl;
  50. }
  51. }
  52. void obliczObwod() {
  53. if (r == 0) throw new Zero("Promien wynosi 0");
  54. else if (r < 0) throw new Mniejszy("Promien jest mniejszy od 0");
  55. else
  56. {
  57. cout << "Obwod kola= " << 3.14 * 2 * r << endl;
  58. }
  59. }
  60. };
  61.  
  62. class Kwadrat : public Ksztalt {
  63. float a;
  64. public:
  65. Kwadrat(float bok) {
  66. a = bok;
  67. }
  68. void obliczPole() {
  69. if (a == 0) throw new Zero("Dlugosc boku wynosi 0");
  70. else if (a < 0) throw new Mniejszy("Dlugosc boku jest mniejsza od 0");
  71. else {
  72. cout << "Pole kwadratu= " << a * a << endl;
  73. }
  74. }
  75. void obliczObwod() {
  76. if (a == 0) throw new Zero("Dlugosc boku wynosi 0");
  77. else if (a < 0) throw new Mniejszy("Dlugosc boku jest mniejsza od 0");
  78. else
  79. {
  80. cout << "Obwod kwadratu= " << 4 * a << endl;
  81. }
  82. }
  83. };
  84.  
  85. int main()
  86. {
  87. Kolo obj(2.0);
  88. try {
  89. obj.obliczPole();
  90. }
  91. catch (Zero* wyjatek) {
  92. wyjatek->rezultat();
  93. }
  94. catch (Mniejszy* wyjatek) {
  95. wyjatek->rezultat();
  96. }
  97. catch (...) {
  98. cout << "Jakis inny wyjatek" << endl;
  99. }
  100.  
  101. Kwadrat obj2(0.0);
  102. try {
  103. obj2.obliczPole();
  104. }
  105. catch (Zero* wyjatek) {
  106. wyjatek->rezultat();
  107. }
  108. catch (Mniejszy* wyjatek) {
  109. wyjatek->rezultat();
  110. }
  111. catch (...) {
  112. cout << "Jakis inny wyjatek" << endl;
  113. }
  114.  
  115. Kwadrat obj3(-5.0);
  116. try {
  117. obj2.obliczPole();
  118. }
  119. catch (Zero* wyjatek) {
  120. wyjatek->rezultat();
  121. }
  122. catch (Mniejszy* wyjatek) {
  123. wyjatek->rezultat();
  124. }
  125. catch (...) {
  126. cout << "Jakis inny wyjatek" << endl;
  127. }
  128.  
  129.  
  130.  
  131. //polimorfizm pozwala na wyslanie do metody wskazniku Ksztaltu
  132. Ksztalt *wsk;
  133. wsk = &obj;
  134.  
  135. wsk->obliczObwod();
  136.  
  137. wsk = &obj2;
  138. try {
  139. wsk->obliczObwod();
  140. }
  141. catch (Zero* wyjatek) {
  142. wyjatek->rezultat();
  143. }
  144. catch (...) {
  145. cout << "Jakis inny wyjatek" << endl;
  146. }
  147.  
  148.  
  149. Kolo obj4(3.0);
  150. wsk = &obj4;
  151. wsk->obliczObwod();
  152.  
  153. return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement