NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 10 - Aréna s mágem (dědičnost a polymorfismus)

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
Jan Vargovský
Tvůrce
Avatar
Odpovídá 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.

Editováno 18.1.2015 18:41
 
Odpovědět
18.1.2015 18:40
Avatar
Selak
Člen
Avatar
Odpovídá 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 :)
 
Odpovědět
18.1.2015 18:44
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 ?
 
Odpovědět
17.8.2015 4:40
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá 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 :))

Editováno 17.8.2015 7:15
Odpovědět
17.8.2015 7:15
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá 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á.

Odpovědět
17.8.2015 7:58
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá 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.

 
Odpovědět
17.8.2015 7:58
Avatar
Michal Gros
Tvůrce
Avatar
Odpovídá na Selak
Michal Gros :28.9.2015 23:39

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

Odpovědět
28.9.2015 23:39
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
Odpovídá 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 ?

Odpovědět
28.9.2015 23:47
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 :)

 
Odpovědět
8.2.2016 14:06
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:))

 
Odpovědět
21.7.2016 18:09
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 10 zpráv z 138.