Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Lekce 2 - První objektová aplikace v C++

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Pavel Klimeš:5.7.2020 22:53

Nebo se nemusejí vytvářet složky, ale jde napsat tohle:

#include <iostream>

using namespace std;

class Trida {
public:
    void funkce(void) {
        cout << "Hello World!" << endl;
    };
};

int main() {

    Trida _instance;
    _instance.funkce();
    cin.get();
    return 0;
}
 
Odpovědět
5.7.2020 22:53
Avatar
Jakub Hrbáček:20.6.2022 12:40

Ahoj, díky za článek. Měl bych jeden dotaz ohledně #include knihoven. U toho příkladu se jedná o #include <iostream>. Jelikož je tato direktiva jak v main.cpp, tak v Zdravic.h, v programu je teda vlastně „zbytečně“ 2x. Když ji z main.cpp dám pryč, program stále funguje. Myslím, že je to pravděpodobně preprocesorem, který knihovnu zahrne do main.cpp přes #include "Zdravic.h" ještě před kompilací.

Chápu, že když bych vytvořil Zdravic jako statickou, či dynamickou knihovnu a používal je v main.cpp, tak bych se do jejich zdrojáku ani nedíval a nezjistil bych, že inkludují nějakou knihovnu, kterou inkluduji znovu v main.cpp.

Jak se to prosím tě řeší v praxi, abych vícekrát zbytečně neinkludoval stejnou knihovnu. Doufám, že jsem se dobře vyjádřil. Níže raději přikládám kód.

//main.cpp

//#include <iostream> zakomentováno
#include "Zdravic.h"
using namespace std;

int main(){
    Zdravic zdr;
    cout << zdr.pozdrav("Johny") << endl;
    return 0;
}
//Zdravic.h

#ifndef __ZDRAVIC_H_
#define __ZDRAVIC_H_
#include <iostream>
using namespace std;

class Zdravic{
    public:
        string j;
        string pozdrav(string jmeno);
};

#endif
//Zdravic.cpp

#include "Zdravic.h"

string Zdravic::pozdrav(string jmeno){
    return "Hello, " + jmeno + " from object world!";
}
 
Odpovědět
20.6.2022 12:40
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jakub Hrbáček
DarkCoder:21.6.2022 11:15

Měl bych jeden dotaz ohledně #include knihoven. U toho příkladu se jedná o #include <iostream>. Jelikož je tato direktiva jak v main.cpp, tak v Zdravic.h, v programu je teda vlastně „zbytečně“ 2x. Když ji z main.cpp dám pryč, program stále funguje. Myslím, že je to pravděpodobně preprocesorem, který knihovnu zahrne do main.cpp přes #include "Zdravic.h" ještě před kompilací.

Přesně tak. Řeší se to stejně tak jako to máš u hlavičkového souboru - pomocí include guards.

Kdykoli je vkládán hlavičkový soubor prvně, definuje se guard __INC_ a vloží se hlavičkový soubor. Zjistí-li preprocesor, že takový guard již existuje, už k žádnému vložení téhož hlavičkového souboru nedojde.

Je na dokumentaci a dodržování těchto pravidel toho kdo vytvářel knihovnu aby poskytl jasný formát pro již vložené hlavičkové soubory.

Formát: __INC_HEADERFILE__

#ifndef __INC_IOSTREAM__
#define __INC_IOSTREAM__
        #include <iostream>
#endif
Odpovědět
21.6.2022 11:15
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.

Zobrazeno 3 zpráv z 13.