Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 10. diel - Aréna s mágom (dedičnosť a polymorfizmus)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Selak
Jan Vargovský:18.1.2015 18:40

Když chceš použít ten konstruktor rodiče tak ano. Resp. můžeš udělat něco takového:

public Kniha(string jmeno,bool crash,int pocetStran)
  : base (jmeno, crash, 0)
 {
  this.pocetStran = pocetStran;
 }

Btw, dědit knihu od meče mi přijde trošku jako špatný návrh.

Editované
Avatar
Selak
Člen
Avatar
Odpovedá na Jan Vargovský
Selak:18.1.2015 18:44

Ok,díky za radu,je to asi špatný návrh :D,ale já tam budu mít třídy: Mec,Boty,Kniha a chci tam použít dědičnost :D

  • Příště to vymyslím líp :)
Avatar
Patrik Bak
Člen
Avatar
Patrik Bak:17.8.2015 4:40

Ahojte. Z tej dedičnosti som dosť zmätený, prečo je toto prosím zle ?

    class Uzivatel
    {
        protected string meno;
        protected string heslo;

        public Uzivatel(string meno, string heslo)
        {
            this.meno = meno;
            this.heslo = heslo;
        }
    }

    class Admin : Uzivatel
    {
        public Admin(string meno, string heslo)
        {
            this.meno = meno;
            this.heslo = heslo;
        }
    }

Keď tam dám to base, tak to funguje, ale nechápem, prečo nefunguje toto. Napríklad tu:

https://msdn.microsoft.com/en-us/library/ms173149.aspx

je kód, kde base nie je a funguje to. Ako to prosím s tými konštruktormi je ?
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovedá na Patrik Bak
Ondřej Štorc:17.8.2015 7:15

Co kdyby jsi měl v rodičovské třídě konstruktor s 50 parametry (což by asi značilo, že je v návrhu tý aplikace něco špatně...) a v poděděné třídě by jsi měl o jeden parametr navíc, psal by jsi se s všemi těmi přiřazování, nebo nějaký výpočty znova, když jsou úplně stejný? Asi ne. Proto je tady base.
P.S: Samozřejmě tu může být za tím ještě něco jiného (to ať mě kdyžtak opraví/doplní zkušenější programátoři :))

Editované
Odpovedať
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovedá na Patrik Bak
Zdeněk Pavlátka:17.8.2015 7:58

Nefunguje to proto, že když v rodiči máš pouze konstruktor s parametry, musíš ho v potomkovi zavolat. Pokud bys to chtěl takhle musel bys do předka přidat protected konstruktor bez parametrů.

class Uzivatel
{
    protected string meno;
    protected string heslo;

    public Uzivatel(string meno, string heslo)
    {
        this.meno = meno;
        this.heslo = heslo;
    }

    /**/ protected Uzivatel() { }
}

class Admin : Uzivatel
{
    public Admin(string meno, string heslo)
    {
        this.meno = meno;
        this.heslo = heslo;
    }
}

tohle by se ale dělat nemělo - co kdyby ho nějaký potomek použil a pak proměnným nenastavil hodnotu... Když už by to bylo takhle, měl by ten "prázdný" konstruktor nastavit proměnným výchozí hodnoty, což se v tomhle případě použít moc nedá.

Odpovedať
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Ondřej Štorc
Jan Vargovský:17.8.2015 7:58

Když dedis z nějaké třídy, tak při vytváření jdeš až k rodici, ktery je úplně nejvýš, u něj se zvola konstruktor a takhle se jde tou vetvi až ke třídě kterou chceš vytvořit. Tvůj případ porušuje zapouzdreni. Jeste k te inicializaci, kompilator musí zavolat nějaký konstruktor, v případě bezparametrickeho nemusíš nic explicitně definovat, zavola se sám, ale v případě parametrickeho musíš říct jaký se má zavolat a předat mu hodnoty. Proto tam musíš volat to base.

Avatar
Michal Gros
Tvůrce
Avatar
Odpovedá na Selak
Michal Gros :28.9.2015 23:39

a co ti říká visual studio za chybu ?

Odpovedať
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Michal Gros
Tvůrce
Avatar
Odpovedá na Selak
Michal Gros :28.9.2015 23:47

Prosím jak najít na webu volbu zavináč před závorkou když chci vytvořit v konzoli předformátovaný text.

Když jsem do svého programu dával Ascii art dost jsem si s s tím zabojoval jsou i jiné fígle ?

Odpovedať
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Roman
Člen
Avatar
Roman:8.2.2016 14:06

Prosím Vás, ako sa dá zmeniť tá farba pozadia / popredia v kóde na ukazovateli ďakujem :)

Avatar
ondra.exner
Člen
Avatar
ondra.exner:21.7.2016 18:09

Pomocí příkazů: Console.Backgrou­ndColor = ConsoleColor.BARVA, Console.Forge­roundColor = ConsoleColor.BARVA a Console.Reset­Color()

Tady je to dyžtak víc rozepsaný: http://www.dotnetperls.com/console-color

(Nebo si tu stáhni zdroják a podívej se:))

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 138.