C++ Třída a objekt s příkladem
Co je třída?
A C++ třída kombinuje data a metody pro manipulaci s daty do jednoho. Třídy také určují formy objektů. Data a metody obsažené ve třídě jsou známé jako členové třídy. Třída je uživatelsky definovaný datový typ. Pro přístup ke členům třídy používáme instanci třídy. Třídu můžete vidět jako plán pro objekt.
Třída je prototypem domu. Ukazuje umístění a velikosti dveří, oken, podlah atd. Z těchto popisů můžeme postavit dům. Dům se stává objektem. Z prototypu je možné vytvořit mnoho domů. Ze třídy je také možné vytvořit mnoho objektů.
Na obrázku výše máme prototyp jednoho domu. Z tohoto prototypu jsme vytvořili dva domy s různými vlastnostmi.
Třídní prohlášení
V C+ je třída definována pomocí klíčového slova class. Za ním by měl následovat název třídy. Tělo třídy je pak přidáno mezi složené závorky { }.
Syntax
class class-name { // data // functions };
- Název třídy je název, který se má třídě přiřadit.
- Data jsou data pro třídu, normálně deklarovaná jako proměnné.
- Funkce jsou funkce třídy.
Soukromá a veřejná klíčová slova
Určitě jste se s těmito dvěma klíčovými slovy setkali. Jsou to modifikátory přístupu.
- Soukromý:
Když se k definici funkce nebo třídy použije klíčové slovo private, stane se soukromé. Takové jsou přístupné pouze ze třídy.
- Veřejnost:
Klíčové slovo public naopak zpřístupňuje data/funkce. Ty jsou přístupné mimo třídu.
Definice objektu
Objekty jsou vytvářeny z tříd. Objekty třídy jsou deklarovány podobným způsobem jako proměnné. Název třídy musí začínat a za ním následovat název objektu. Objekt typu třídy.
Syntax
class-name object-name;
- Název-třídy je název třídy, ze které má být objekt vytvořen.
- Název-objektu je název, který má být přiřazen novému objektu.
Tento proces vytváření objektu z třídy se nazývá konkretizace.
Přístup k datovým členům
Pro přístup k veřejným členům třídy používáme operátor (.)tečka. Jedná se o členy označené modifikátorem veřejného přístupu.
Příklad 1
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Zahrňte hlavičkový soubor iostream do našeho kódu, abyste mohli používat jeho funkce.
- Zahrnutí jmenného prostoru std do našeho kódu pro použití jeho tříd bez jeho volání.
- Deklarujte třídu s názvem Telefon.
- Použití modifikátoru public access k označení proměnných, které se chystáme vytvořit, jako veřejně přístupných.
- Deklarujte variabilní náklady dvojitého datového typu.
- Deklarujte celočíselnou proměnnou s názvem sloty.
- Konec těla třídy.
- Volání funkce main(). Logika programu by měla být přidána do jeho těla.
- Vytvořte objekt s názvem Y6 typu Telefon. Tomu se říká konkretizace.
- Vytvořte objekt s názvem Y7 typu Telefon. Tomu se říká konkretizace.
- Přístup k variabilním/členským nákladům třídy Telefon pomocí objektu Y6. Hodnota je nastavena na 100.0. Cena Y6 je nyní nastavena na 100.0.
- Přístup k proměnným/členským slotům třídy Phone pomocí objektu Y6. Hodnota je nastavena na 2. Sloty pro Y6 jsou nyní nastaveny na 2.
- Přístup k variabilním/členským nákladům třídy Telefon pomocí objektu Y7. Hodnota je nastavena na 200.0. Cena Y7 je nyní nastavena na 200.0.
- Přístup k proměnným/členským slotům třídy Phone pomocí objektu Y7. Hodnota je nastavena na 2. Sloty pro Y7 jsou nyní nastaveny na 2.
- Vytiskněte cenu Y6 na konzole spolu s jiným textem.
- Vytiskněte cenu Y7 na konzole spolu s jiným textem.
- Vytiskněte počet slotů pro Y6 vedle jiného textu.
- Vytiskněte počet slotů pro Y7 vedle jiného textu.
- Program musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Co je soukromá třída?
Ke členům třídy označeným jako soukromé mají přístup pouze funkce definované v rámci třídy. Žádný objekt nebo funkce definovaná mimo třídu nemůže k těmto členům přímo přistupovat. Člen soukromé třídy je přístupný pouze funkcím členů a přátel.
Co je chráněná třída?
Členové třídy označení jako chránění mají výhodu oproti těm, kteří jsou označeni jako soukromí. Lze k nim přistupovat funkcemi v rámci třídy jejich definice. Navíc k nim lze přistupovat z odvozených tříd.
Příklad 2
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu hlavičkový soubor iostream.
- Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem ClassA.
- Pomocí modifikátoru veřejného přístupu označte člena třídy, který má být vytvořen, jako veřejně přístupného.
- Vytvořte funkci s názvem set_a(), která přebírá jedno celé číslo val.
- Vytvořte funkci s názvem get_a().
- Pomocí modifikátoru soukromého přístupu označte člena třídy, který má být vytvořen, jako soukromě přístupného.
- Deklarujte celočíselnou proměnnou s názvem a.
- Konec těla třídy.
- Pro přístup k funkci get_a() použijte název třídy a operátor rozlišení rozsahu. Chceme definovat, co funkce dělá, když je vyvolána.
- Funkce get_a() by měla při vyvolání vrátit hodnotu proměnné a.
- Konec definice funkce get_a().
- Pro přístup k funkci set_a() použijte název třídy a operátor rozlišení rozsahu. Chceme definovat, co funkce dělá, když je vyvolána.
- Přiřazení hodnoty proměnné val k proměnné a.
- Konec definice funkce set_a().
- Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
- Vytvořte instanci třídy A a dejte jí název a.
- Pomocí výše uvedené instance třídy a funkce set_a() přiřaďte proměnné a hodnotu 20.
- Tisk nějakého textu vedle hodnoty proměnné a na konzole. Hodnotu proměnné a získáme voláním funkce get_a().
- Program musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Příklad 3
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu hlavičkový soubor iostream.
- Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem ParentClass.
- Pomocí modifikátoru chráněného přístupu označte člena třídy, který má být vytvořen, jako chráněného.
- Vytvořte celočíselnou proměnnou s názvem value.
- Konec těla třídy.
- Vytvořte novou třídu s názvem ChildClass, která zdědí ParentClass.
- Pomocí modifikátoru chráněného přístupu označte člena třídy, který má být vytvořen, jako přístupného pro podřízené třídy.
- Vytvořte funkci s názvem setId(), která přebírá jedno celé číslo x.
- Přiřazení hodnoty proměnné x k hodnotě proměnné.
- Konec definice funkce setId().
- Vytvořte funkci s názvem displayValue().
- Vytiskněte hodnotu proměnné s názvem value na konzole vedle jiného textu.
- Konec těla funkce displayValue().
- Konec těla třídy s názvem ChildClass.
- Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
- Vytvořte instanci ChildClass a pojmenujte ji c.
- Pomocí výše uvedené instance třídy a funkce setId() přiřaďte proměnné x hodnotu 21.
- Použijte výše uvedenou instanci třídy k volání funkce s názvem displayValue().
- Program musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Funkce členů třídy
Funkce nám pomáhají manipulovat s daty. Funkce členů třídy lze definovat dvěma způsoby:
- Uvnitř definice třídy
- Mimo definici třídy
Pokud má být funkce definována mimo definici třídy, musíme použít operátor rozlišení rozsahu (::). To by mělo být doprovázeno názvy tříd a funkcí.
Příklad 2
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho programu hlavičkový soubor iostream.
- Chcete-li používat jeho funkce, zahrňte do našeho programu hlavičkový soubor řetězce.
- Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem Guru99.
- Pomocí modifikátoru public access označte členy třídy, které se chystáme vytvořit, jako veřejně přístupné.
- Vytvořte řetězcovou proměnnou s názvem tutorial_name.
- Vytvořte celočíselnou proměnnou s názvem id.
- Vytvořte funkci s názvem printname(). Tato funkce není definována v definici třídy.
- Vytvořte funkci s názvem print(). Tato funkce je definována v definici třídy. Jeho tělo bylo přidáno do definice třídy.
- Vytiskněte hodnotu proměnné id vedle jiného textu na konzole. Všimněte si, že to bylo přidáno do těla funkce printid(). Provede se pouze při volání funkce printid().
- Konec těla funkce printid().
- Konec těla třídy Guru99.
- Začátek definice funkce printname().
- Vytiskněte hodnotu proměnné tutorial_name na konzole spolu s jiným textem. Všimněte si, že to bylo přidáno do těla funkce printname(). Provede se pouze při volání funkce printname().
- Konec definice funkce printname().
- Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
- Vytvořte instanci třídy Guru99 a pojmenujte ji guru99.
- Použijte výše uvedenou instanci k přiřazení hodnoty C++ na proměnnou tutorial_name.
- Použijte instanci guru99 k přiřazení hodnoty 1001 proměnné id.
- Použijte instanci guru99 k volání funkce printname() .
- Zavolejte příkaz end (end line) a vytiskněte na konzoli nový prázdný řádek.
- Použijte instanci guru99 k volání funkce printid().
- Program musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Konstruktoři a destruktory
Co je to konstruktéři?
Konstrukty jsou speciální funkce, které inicializují objekty. The C++ kompilátory volá konstruktor při vytváření objektu. Konstruktory pomáhají přiřazovat hodnoty členům třídy. To je samozřejmě poté, co jim bylo přiděleno nějaké místo v paměti.
Co je to Destruktory?
Destruktory na druhé straně pomáhají ničit objekty třídy.
Název konstruktoru musí být podobný názvu třídy. Konstruktory nemají návratový typ.
Konstruktor může být definován uvnitř nebo vně těla třídy. Pokud je definováno mimo tělo třídy, mělo by být definováno názvem třídy a operátorem rozlišení rozsahu (::).
Příklad 3
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do kódu soubor záhlaví iostream.
- Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem ClassA.
- Pomocí modifikátoru veřejného přístupu označte člena, kterého se chystáme vytvořit, jako veřejně přístupného.
- Vytvořte konstruktor pro třídu.
- Text, který se má vytisknout na konzole při volání konstruktoru. Konec je a C++ klíčové slovo, což znamená koncový řádek. Přesune kurzor myši na další řádek.
- Konec těla konstruktoru třídy.
- Vytvořte destruktor pro třídu.
- Text, který se má vytisknout na konzole při volání destruktoru. Konec je a C++ klíčové slovo, což znamená koncový řádek. Přesune kurzor myši na další řádek.
- Konec těla destruktoru.
- Konec těla třídy.
- Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
- Vytvořte objekt třídy a dejte mu název a. Bude zavolán konstruktor.
- Vytvořte celočíselnou proměnnou s názvem p a přiřaďte jí hodnotu 1.
- Vytvořte blok příkazů if pomocí proměnné p.
- Vytvořte objekt třídy a pojmenujte jej b. Zavolá se destruktor.
- Konec těla příkazu if.
- Konec těla funkce main().
Shrnutí
- C++ je objektově orientovaný.
- Třídy tvoří hlavní rysy C++ díky kterým je objektově orientovaný.
- A C++ třída kombinuje data a metody pro manipulaci s daty do jednoho.
- Třída je plán pro objekt.
- Třídy určují formu objektu.
- Data a metody obsažené ve třídě jsou známé jako členové třídy.
- Pro přístup ke členům třídy byste měli použít instanci třídy.
- K vytvoření třídy používáme klíčové slovo class.
- Funkce členů třídy lze definovat uvnitř nebo vně třídy.