Advertisement
peterzig

[PO] Polimorfizm Figura

May 23rd, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. // [PO] Polimorfizm - Figura.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <iostream>
  5. #include <string>
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <fstream>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13. class Figura
  14. {
  15. public:
  16.     virtual string Nazwa() = 0;
  17.     virtual int Obwod() = 0;
  18.     virtual int PolePowierzchni() = 0;
  19. };
  20.  
  21. class Prostokat :public Figura
  22. {
  23. private:
  24.     int a;
  25.     int b;
  26. public:
  27.     Prostokat(string opis, int a, int b)
  28.     {
  29.         this->a = a;
  30.         this->b = b;
  31.     }
  32.     string Nazwa()
  33.     {
  34.         return "Prostokat";
  35.     }
  36.     int Obwod()
  37.     {
  38.         return a + a + b + b;
  39.     }
  40.     int PolePowierzchni()
  41.     {
  42.         return a*b;
  43.     }
  44. };
  45.  
  46. class Kwadrat :public Figura
  47. {
  48. private:
  49.     int a;
  50. public:
  51.     Kwadrat(string opis, int a)
  52.     {
  53.         this->a = a;
  54.     }
  55.     string Nazwa()
  56.     {
  57.         return "Kwadrat";
  58.     }
  59.     int Obwod()
  60.     {
  61.         return a + a + a + a;
  62.     }
  63.     int PolePowierzchni()
  64.     {
  65.         return a*a;
  66.     }
  67. };
  68.  
  69. class Elipsa :public Figura
  70. {
  71. private:
  72.     int r1;
  73.     int r2;
  74. public:
  75.     Elipsa(string opis, int r1, int r2)
  76.     {
  77.         this->r1 = r1;
  78.         this->r2 = r2;
  79.     }
  80.     string Nazwa()
  81.     {
  82.         return "Elipsa";
  83.     }
  84.     int Obwod()
  85.     {
  86.         return r1 + r2 + r1 + r2;
  87.     }
  88.     int PolePowierzchni()
  89.     {
  90.         return 3.14*r1*r2;
  91.     }
  92. };
  93.  
  94. class Kolo :public Figura
  95. {
  96. private:
  97.     int r;
  98. public:
  99.     Kolo(string opis, int r)
  100.     {
  101.         this->r = r;
  102.     }
  103.     string Nazwa()
  104.     {
  105.         return "Kolo";
  106.     }
  107.     int Obwod()
  108.     {
  109.         return 2 * 3.14*r;
  110.     }
  111.     int PolePowierzchni()
  112.     {
  113.         return 3.14*r*r;
  114.     }
  115. };
  116.  
  117. int main()
  118. {
  119.     string l;
  120.     int licznik = 0;
  121.     fstream plik;
  122.     plik.open("plik.txt", ios::in);
  123.     if (plik.good() == false) cout << "Blad otwarcia pliku";
  124.     while (getline(plik, l))
  125.     {
  126.         licznik++;
  127.     }
  128.  
  129.     plik.close();
  130.  
  131.     Figura *tablica[20];
  132.     string linia;
  133.     plik.open("plik.txt", ios::in);
  134.     if (plik.good() == false) cout << "Blad otwarcia pliku";
  135.  
  136.  
  137.     for (int i = 0; i < licznik + 5; i++)
  138.     {
  139.         int pom1;
  140.         int pom2;
  141.         plik >> linia;
  142.         do {
  143.             if (linia == "Prostokat")
  144.             {
  145.                 plik >> pom1;
  146.                 plik >> pom2;
  147.                 tablica[i] = new Prostokat(linia, pom1, pom2);
  148.                 cout << tablica[i]->Nazwa() << endl << tablica[i]->Obwod() << endl << tablica[i]->PolePowierzchni() << endl;
  149.             }
  150.             else if (linia == "Kwadrat")
  151.             {
  152.                 plik >> pom1;
  153.                 tablica[i] = new Kwadrat(linia, pom1);
  154.                 cout << tablica[i]->Nazwa() << endl << tablica[i]->Obwod() << endl << tablica[i]->PolePowierzchni() << endl;
  155.             }
  156.  
  157.             else if (linia == "Kolo")
  158.             {
  159.                 plik >> pom1;
  160.                 tablica[i] = new Kolo(linia, pom1);
  161.                 cout << tablica[i]->Nazwa() << endl << tablica[i]->Obwod() << endl << tablica[i]->PolePowierzchni() << endl;
  162.  
  163.             }
  164.             else if (linia == "Elipsa")
  165.             {
  166.                 plik >> pom1;
  167.                 plik >> pom2;
  168.                 tablica[i] = new Elipsa(linia, pom1, pom2);
  169.                 cout << tablica[i]->Nazwa() << endl << tablica[i]->Obwod() << endl << tablica[i]->PolePowierzchni() << endl;
  170.  
  171.             }
  172.             i++;
  173.         } while (plik.eof());
  174.     }                  
  175.    
  176.     plik.close();
  177.    
  178.     _getch();
  179.     return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement