Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Cvičení k 13. až 15. lekci OOP v C++

C a C++ C++ Objektově orientované programování Cvičení k 13. až 15. lekci OOP v C++

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti objektově orientovaného programování v C++ z minulých lekcí. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulých tutoriálů a pokuste se na to přijít.

Jednoduchý příklad

Angry bird

Fotografie: Mohamed Raoof.p.m / Rex features

V aplikaci vytvořte třídu Ptak s atributy:

  • hlad = 100 jednotek
  • vaha = 50 gramů

Třídě dodejte virtuální metodu snez(), která přijímá kolik gramů potravy má pták sníst. Váha ptáka se po snědení potravy zvýší o váhu potravy a hlad se o toto množství sníží.

Následně přidejte třídu AngryPtak, který ptáka rozšiřuje o atribut vztek a metodu provokuj(). Tato metoda přijímá jako parametr míru provokace, která zvýší vztek ptáka. Pokud je pták hladový, naštve se 2x rychleji (přičte se mu tedy dvojnásobek míry provokace, než kolik bylo metodě předáno).

Ukázka obrazovky programu:

Konzolová aplikace
Jsem ptak s vahou 50 a hladem 100
Jsem ptak s vahou 70 a hladem 80
Jsem ptak s vahou 50 a hladem 100, mira meho vzteku je 0
Jsem ptak s vahou 50 a hladem 100, mira meho vzteku je 10
Jsem ptak s vahou 150 a hladem 0, mira meho vzteku je 15

Středně pokročilý příklad

Rozšiřte třídu Clovek z Cvičení k 3. a 4. lekci OOP v C++. Pokud cvičení nemáte zakoupené, kód třídy je následující:

Clovek.h

#ifndef __CLOVEK_H_
#define __CLOVEK_H_

#include <string>

using namespace std;

class Clovek
{
public:
    string jmeno;
    int unava;

    Clovek(string jmeno);

    void behej(int km);

    void spi(int hodin);
};

#endif

Clovek.cpp

#include "Clovek.h"
#include <iostream>
using namespace std;

Clovek::Clovek(string _jmeno)
{
    jmeno = _jmeno;
    unava = 20;
    cout << "Clovek " << _jmeno << " vytvoren" << endl;
}

void Clovek::behej(int km)
{
    if(unava - km < 0)
    {
        cout << "Jsem prilis unaveny" << endl;
        return;
    }
    unava = unava - km;
    cout << "Ubehl jsem " << km << " km" << endl;
}

void Clovek::spi(int hodin)
{
    if(unava + hodin > 20)
    {
        cout << "Nepotrebuji spat" << endl;
        return;
    }
    unava = unava + hodin;
    cout << "Spal jsem " << hodin << " hodin" << endl;
}

Třídu Clovek poděďte ve třídě Ceckar. Ceckar člověka rozšiřuje o atribut IDE, kde je uložen název vývojového prostředí, ve kterém programuje. Atribut se zadává spolu s dalšími atributy céčkaře v konstruktoru. Ceckar dále disponuje metodou programuj(), která přijímá v parametru počet řádků, které má napsat. Za každých 10 řádku přidejte jednotku únavy a zároveň únavu nenechte vzrůst nad 20 jednotek. V případě příliš vysoké únavy metoda vypíše "Jsem příliš unavený, abych programoval".

Céčkař nechte různě běhat, spát a pracovat, abyste ho vyzkoušeli.

Ukázka obrazovky programu:

Konzolová aplikace
Clovek Karel vytvoren
Ubehl jsem 5 km
Nepotrebuji spat
Naprogramoval jsem 100 radku
Jsem prilis unaveny, abych programoval
Ubehl jsem 5 km
Jsem prilis unaveny

Třídu musíte drobně upravit, aby bylo rozšíření možné. Protože jsme již zběhlí programátoři, nezapomeňte použít správné modifikátory přístupu. Také nezapomeňte zavolat konstruktor předka.

Pokročilý příklad

Vytvořte třídu Tvar, která slouží jako předek pro všechny geometrické útvary a která definuje jejich společné vlastnosti. Všechny tvary mají nějakou barvu (string), kterou lze nastavit konstruktorem.

Od této třídy následně odvoďte třídy Trojuhelnik a Obdelnik, které budou schopny spočítat svůj obsah. Hierarchie tříd je znázorněna následujícím UML diagramem:

UML diagram

K výpočtu obsahu trojúhelníku využijte Heronova vzorce.

Heronův vzorec umožňuje vypočítat obsah libovolného trojúhelníku pomocí délek jeho stran. Při výpočtu nejprve spočítáme s (malé es). Celkový obsah spočítáme pomocí tohoto s a to takto:

Heronův vzorec

S využitím těchto tříd vypočítejte obsah tohoto obrazce:

Cvičení k OOP v C++ – Strom

Ukázka obrazovky programu:

Konzolová aplikace
Obsah obrazce je 492.578 cm^2

Třídu Tvar by bylo vhodné označit jako abstraktní, aby jazyk chápal, že slouží pouze k dědění a nemá od ní smysl vytvářet instanci (vytvořit obecný tvar nedává smysl). Jak to udělat se dozvíte dále v C++ kurzu.


 

Stáhnout

Staženo 3x (19.47 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

 

Článek pro vás napsal patrik.valkovic
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Miniatura
Předchozí článek
Polymorfismus v C++
Miniatura
Následující článek
Abstraktní třídy a rozhraní v C++
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!