Advertisement
Aseron

KotProgV2

Nov 15th, 2017
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <typeinfo>
  4.  
  5.  
  6. /*
  7. Hozz létre egy Telefon osztályt, ami egy telefont reprezentál.
  8. A telefonnak legyen száma (9 jegyû szám, vagy 9 karakteres tömb), valamint felhasználható internet mennyiségét (double, megabájtban számolva).
  9. Az osztálynak legyen:
  10. Egy olyan konstruktora, ami a paraméterként várja a számot, és a felhasználható internet mennyiségét
  11. Egy olyan konstruktora, ami a konzolról olvassa be az adatokat.
  12. Egy internetHasznál() függvénye, amely a paraméterben megadott számmal csökkenti a felhasználható internet mennyiségét.
  13. Amennyiben paraméter nélkül hívjuk meg a függvényt, pontosan 1.2 megabájttal csökkenjen a felhasználható keret.
  14. Egy feltölt() függvény, amely pontosan 500 megabájtot ad hozzá a felhasználható internethez,
  15.  de ügyelj rá, hogy a felhasználható keret legfeljebb 1500 megabájt legyen. Ezen érték felé ne emelkedhessen a szám!
  16. Egy adatok() függvény, ami kiírja az alapértelmezett kimenetre a számot és a felhasználható internet mennyiségét.
  17. Származtass le az Telefon osztályból egy SzuperNetezõTelefon osztályt, ami tárolja magáról, hogy használhat-e 4G-t vagy sem (bool).
  18.  
  19. Az osztálynak legyen:
  20. Egy olyan konstruktora, ami a paraméterként várja a számot, a felhasználható internet mennyiségét, és azt, hogy használhat-e 4G-t.
  21. Egy save függvénye, ami a paraméterül kapott fájlba elmenti az adatokat.
  22. Felüldefiniált internetHasznál() függvénye, amely a paraméterben megadott számmal csökkenti a felhasználható internet mennyiségét.
  23. Amennyiben paraméter nélkül hívjuk meg a függvényt, pontosan 23.5 megabájttal csökkenjen a felhasználható keret.
  24. Felüldefiniált feltölt() függvénye, amely pontosan 500 megabájtot ad hozzá a felhasználható internethez, korlátozás nélkül.
  25. Készíts egy main függvényt, ami az elkészült osztályokat (függvényeivel együtt) teszteli!
  26. */
  27.  
  28.  
  29. using namespace std;
  30.  
  31. class Telefon{
  32.     protected:
  33.         int number[9];
  34.     public:
  35.         double data;
  36.         Telefon(int[],double);
  37.         Telefon();
  38.         void internetHasznal();
  39.         void internetHasznal(double);
  40.         void feltolt();
  41.         void adatok();
  42.  
  43. };
  44.  
  45. Telefon :: Telefon(int number[9], double data){
  46.  
  47.     // cout << "A megadott telefonszám: ";
  48.  
  49.         for(int i = 0; i<9; i++){
  50.             this->number[i] = number[i];
  51.             // cout << number[i];
  52.         }
  53.  
  54.     //cout << endl;
  55.  
  56.     this->data = data;
  57.  
  58.     //cout << "A megadott felhasználható adatmennyiség: " << data << " MB" << endl;
  59.  
  60. }
  61.  
  62. Telefon :: Telefon(){
  63.  
  64.     cout << "Adja meg a 9 jegyu telefonszamot, szokozzel elvalasztva!" << endl;
  65.         for(int i = 0; i<9; i++){
  66.             cin >> number[i];
  67.         }
  68.  
  69.     cout << "Adja meg a felhasznalhato internet mennyiseget megabajtban!" << endl;
  70.     cin >> data;
  71.  
  72. }
  73.  
  74. void Telefon :: internetHasznal(double hasznal){
  75.  
  76.     if((data-hasznal) <= 0){
  77.         data = 0;
  78.     } else data-=hasznal;
  79.  
  80.     if(data == 0){
  81.         cout << "Nincs felhasznalhato adatkeret!" << endl;
  82.     }else cout << "Felhasznalast koveto adatkeret: " << data << endl;
  83. }
  84.  
  85. void Telefon :: internetHasznal(){
  86.  
  87.     if((data-1.2) <= 0){
  88.         data = 0;
  89.     } else data-=1.2;
  90.  
  91.     if(data == 0){
  92.         cout << "Nincs felhasznalhato adatkeret!" << endl;
  93.     }else cout << "Felhasznalast koveto adatkeret: " << data << endl;
  94.  
  95. }
  96.  
  97. void Telefon :: feltolt(){
  98.  
  99.  
  100.     if((data+500)>=1500){
  101.         data = 1500;
  102.     }else data+=500;
  103.  
  104.     cout << "Feltoltes utani aktualis adatkereted: " << data << " MB" << endl;
  105.  
  106. }
  107.  
  108. void Telefon :: adatok(){
  109.  
  110.     cout << "Telefonszam: ";
  111.  
  112.         for(int i = 0; i<9; i++){
  113.             cout << number[i];
  114.         }
  115.  
  116.     cout << endl;
  117.  
  118.     cout << "Adatkeret: " << data << " MB" << endl;
  119.  
  120. }
  121.  
  122. class SzuperNetezoTelefon : public Telefon{
  123.  
  124.         bool negyG;
  125.  
  126.     public:
  127.  
  128.         SzuperNetezoTelefon(int[],double,bool);
  129.         void save(char*);
  130.         void internetHasznal();
  131.         void internetHasznal(double);
  132.         void feltolt();
  133. };
  134.  
  135. SzuperNetezoTelefon :: SzuperNetezoTelefon(int number[9], double data, bool negyG): Telefon(number,data) {
  136.     this->negyG = negyG;
  137. }
  138.  
  139.  
  140. void SzuperNetezoTelefon ::save (char* fname){
  141.     ofstream o(fname);
  142.  
  143.     for(int i = 0; i<9; i++){
  144.         o << number[i];
  145.     }
  146.  
  147.     o << endl << data << endl;
  148.     o.close();
  149. }
  150.  
  151. void SzuperNetezoTelefon :: internetHasznal(double hasznal){
  152.  
  153.     if((data-hasznal) <= 0){
  154.         data = 0;
  155.     } else data-=hasznal;
  156.  
  157.     if(data == 0){
  158.         cout << "Nincs felhasznalhato adatkeret!" << endl;
  159.     }else cout << "Felhasznalast koveto adatkeret: " << data << endl;
  160. }
  161.  
  162. void SzuperNetezoTelefon :: internetHasznal(){
  163.  
  164.     if((data-23.5) <= 0){
  165.         data = 0;
  166.     } else data-=23.5;
  167.  
  168.     if(data == 0){
  169.         cout << "Nincs felhasznalhato adatkeret!" << endl;
  170.     }else cout << "Felhasznalast koveto adatkeret: " << data << endl;
  171.  
  172. }
  173.  
  174. void SzuperNetezoTelefon :: feltolt(){
  175.  
  176.     data+=500;
  177.  
  178.     cout << "Feltoltes utani aktualis adatkereted: " << data << " MB" << endl;
  179.  
  180. }
  181.  
  182. /*
  183. Hozz létre egy TelefonKatalógus nevű osztályt, ami Telefon objektumokat tud tárolni.
  184. Legyen egy konstruktora, amely paraméterül vár egy számot. Ennyi Telefon objektumra mutató pointernek foglajon dinamikusan helyet.
  185. Készíts egy add metódust (ami logikai értékkel tér vissza), amely a telefon katalógushoz hozzáadja a paraméterből érkező telefon objektumot
  186. (A telefon objektumról másolatot készítsünk, copy konstruktorral), egészen addig, amíg van hely. Ha nincs már hely, ne csináljon semmit,
  187. csak térjen vissza false értékkel.
  188. Definiáld felül a prefix ++ operátort, amely az összes telefon felhasználható internet mennyiségét megnöveli 100 megabájttal.
  189. Definiáld felül a tömbindex operátort, amely térjen vissza a tárolt telefonok közül a paraméterben megadott indexűvel,
  190. amennyiben az létezik. Amennyiben nem, térjen vissza az utolsó tárolt indexen lévő telefonnal
  191. Definiáld felül az ostream << operátorát, aminek segítségével írasd ki az összes tárolt telefon darabszámát,
  192. és a telefonokra egyesével hívja meg az adatok() függvényt.
  193. Készíts destruktort, amely felszabadítja a tárolt objektumokat, és a tárulásokra használt pointer tömböt.
  194. Készíts egy main függvényt, amely:
  195. Létrehoz egy TelefonKatalógus objektumot, amiben helyet foglaltat 100 telefonnak
  196. Adj hozzá 2 Telefon és 3 SzuperNetezőTelefon objektumot.
  197. Írasd ki << operátorral ( cout << … ).
  198. Hívd meg a ++ operátort.
  199. Szabadítsd föl minden lefoglalt memóriaterületet.
  200. */
  201.  
  202. class TelefonKatalogus {
  203.  
  204.     int n;
  205.  
  206. public:
  207.     Telefon **m;
  208.     int cnt;
  209.     TelefonKatalogus(int);
  210.     TelefonKatalogus(TelefonKatalogus*);
  211.     ~TelefonKatalogus();
  212.     bool add(Telefon&);
  213.     void operator++();
  214.     Telefon& operator[](int index);
  215.     friend ostream& operator<<(ostream&,TelefonKatalogus&);
  216. };
  217.  
  218.  
  219. TelefonKatalogus::TelefonKatalogus(int n) {
  220.     this->cnt = 0;
  221.     this->n = n;
  222.     this->m = new Telefon*[n];
  223. }
  224.  
  225. TelefonKatalogus::TelefonKatalogus(TelefonKatalogus *tk) {
  226.     n = tk->n;
  227.     *m = new Telefon[n];
  228.     for (int i=0;i<n;i++) m[i]=tk->m[i];
  229. }
  230.  
  231.  
  232. TelefonKatalogus::~TelefonKatalogus() {
  233.  
  234.     for(int i = 0; i<cnt; i++){
  235.         delete m[i];
  236.     }
  237.     delete *m;
  238. }
  239.  
  240.  
  241. bool TelefonKatalogus::add(Telefon& obj){
  242.     if(cnt<this->n){
  243.         this->m[cnt] = &obj;
  244.         cnt++;
  245.         return true;
  246.  
  247.     }else{
  248.         return false;
  249.     }
  250. }
  251.  
  252.  
  253. void TelefonKatalogus::operator++() {
  254.     int a = 100;
  255.     for (int i=0;i<cnt;i++){
  256.             m[i]->data = m[i]->data+a;
  257.     }
  258. }
  259.  
  260.  
  261.  
  262. Telefon& TelefonKatalogus::operator[](int index){
  263.     if(index<=cnt-1){
  264.         return *m[index];
  265.     }else return *m[cnt-1];
  266. }
  267.  
  268. ostream& operator<<(ostream &o,TelefonKatalogus &tk) {
  269.     o << tk.cnt << "db telefon van a katalogusban!" << endl;
  270.  
  271.     for(int i = 0; i<tk.cnt; i++){
  272.         tk.m[i]->adatok();
  273.     }
  274. }
  275.  
  276.  
  277.  
  278. int main()
  279. {
  280.     setlocale(LC_ALL,"hun");
  281.  
  282.     int telefonszam1[9] = {1,1,1,1,1,1,1,1,1};
  283.     int telefonszam2[9] = {2,2,2,2,2,2,2,2,2};
  284.     int telefonszam3[9] = {3,3,3,3,3,3,3,3,3};
  285.     int telefonszam4[9] = {4,4,4,4,4,4,4,4,4};
  286.     int telefonszam5[9] = {5,5,5,5,5,5,5,5,5};
  287.  
  288.     Telefon t1(telefonszam1,1100.0);
  289.     Telefon t2(telefonszam2,1200.0);
  290.     SzuperNetezoTelefon sznt1(telefonszam3,1300.0, true);
  291.     SzuperNetezoTelefon sznt2(telefonszam4,1400.0, true);
  292.     SzuperNetezoTelefon sznt3(telefonszam5,1500.0, true);
  293.  
  294.  
  295.     // 100 ferohelyes katalogus letrehozasa
  296.     TelefonKatalogus tk(100);
  297.  
  298.     // telefonok hozzaadasa a katalogushoz
  299.     tk.add(t1);
  300.     tk.add(t2);
  301.     tk.add(sznt1);
  302.     tk.add(sznt2);
  303.     tk.add(sznt3);
  304.  
  305.     // copy constructor segitsegevel lemasolom az eredeti tk-t
  306.     TelefonKatalogus tk2(tk);
  307.  
  308.     // << operator overloading
  309.     cout << tk2;
  310.  
  311.     cout << endl;
  312.  
  313.     // Adam teso, ezert logsz egy energiaitallal, azzal a dinnyessel, amit mutattal multkor...:D <3
  314.    
  315.     // prefix ++ operator overloading
  316.     ++tk2;
  317.  
  318.     // [TESZT] tomb index operator overloading
  319.     tk2[0].adatok();
  320.     tk2[1].adatok();
  321.     tk2[2].adatok();
  322.     tk2[3].adatok();
  323.     tk2[4].adatok();
  324.     tk2[5].adatok(); // itt is a 4. indexen levot fogja meghivni
  325.  
  326.  
  327.  
  328.  
  329.  
  330. /*
  331.     int telefonszam[9] = {1,2,3,4,5,6,7,8,9};
  332.  
  333.     Telefon *t = new Telefon(telefonszam,1500.0);
  334.     // Telefon *t = new Telefon();
  335.     t->internetHasznal(500.0);
  336.     // t->internetHasznal();
  337.     t->feltolt();
  338.     t->adatok();
  339.     delete t;
  340.  
  341.  
  342.     SzuperNetezoTelefon *t = new SzuperNetezoTelefon(telefonszam,3000.0,true);
  343.     t->save("num_dat.txt");
  344.     t->internetHasznal(1000.0);
  345.     // t->internetHasznal();
  346.     t->feltolt();
  347.     delete t;
  348. */
  349.  
  350.     return 0;
  351. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement