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
Odpovídá na Ondřej Čech
Michaela Radimská:1.3.2018 16:16

Ano, životy se vyhodnotí už při boji (metoda BranSe() v rámci b1.Utoc(b2)), na konzoli se stav nejprve vykreslí Vykresli() a pak teprve vypíše VypisZpravu(…..). Dalo by se prohodit – nejdřív vypsat zprávu, pak vykreslit (a trochu si pohrát s metodou Vykresli(), aby to dávalo smysl).
Po čtvrt roce je ti to už asi jedno… Učím se to teď a taky jsem o tom přemýšlela.

 
Odpovědět
1.3.2018 16:16
Avatar
Odpovídá na Michaela Radimská
Ondřej Čech:3.3.2018 8:21

I po 1/4 roce se hodi odpoved. Pro nekoho dalsiho, kdo se bude ucit. =)

 
Odpovědět
3.3.2018 8:21
Avatar
Moni
Člen
Avatar
Moni:22.3.2018 13:33

Super, všechno funguje. Děkuji moc.

 
Odpovědět
22.3.2018 13:33
Avatar
Daniel Šmejkal:12.6.2018 12:37

Ahoj, něco základního mi zřejmě uniklo, ale nikde tu k tomu nemůžu nic najít. VS mi nedovolí vytvořit třídu Mag děděním z Bojovnik. V kódu mi VS červeně označuje název třídy Mag s hláškou: "there is no argument given that corresponds to the required formal parameter...."
Co je špatně? Ze všech ostatních vytvořených tříd se mi daří dědit jen z třídy Kostka.

namespace Arena
{
    class Mag: Bojovnik
    {
        private int mana;
        private int maxMana;
        private int magickyUtok;
    }
 
Odpovědět
12.6.2018 12:37
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Daniel Šmejkal
Martin Petrovaj:12.6.2018 13:02

Ahoj, tvoj Bojovnik (ak si išiel podľa tutoriálu) zrejme nemá bezparametrický konštruktor - nepamätám si to teraz presne, ale na svoje vytvorenie potrebuje minimálne nejaké meno a asi aj život, útok, kocku… C# totiž nededí konštruktory.

Ak chceš, aby Mag v takomto prípade dedil z Bojovnik, musíš potrebnými dátami rodiča (triedu Bojovnik) nainicializovať. Dosiahneš to vytvorením konštruktoru v Magovi, v ktorom zavoláš slovíčkom base konštruktor predka:

public Mag(parametre) : base(parametre)
{
}

Samozrejme pri tom môžeš aj nejako dodatočne doinicializovať svojho Maga, napr.:

public Mag(string meno, int mana, Kocka k) : base(meno, k)
{
this.mana = mana;
}

A všetko by malo ísť bez problémov a Mag bude nainicializovaný ako má byť. :-)

Odpovědět
12.6.2018 13:02
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Daniel Šmejkal:12.6.2018 13:55

Moc díky za radu. Já jsem to volání base konstruktoru měl, ale zřejmě byla někde chyba v syntaxi. Už všechno funguje.

 
Odpovědět
12.6.2018 13:55
Avatar
Dušan Kovářík:22.6.2018 19:07

Uff...Pecka! Všechno funguje a rozumím tomu...i když cítím, že si všechny ty věci kolem dědičnosti, polymorfizmu apod. budu muset více osahat a zažít :) Díky za skvělý tutoriál!

 
Odpovědět
22.6.2018 19:07
Avatar
Tonda Đình Hoàng:17.7.2018 21:55

Ahoj, jaký je rozdíl mezi
Bojovnik gandalf = new Mag("Gandalf", 60, 15, 12, kostka, 30, 45);
a
Mag gandalf = new Mag("Gandalf", 60, 15, 12, kostka, 30, 45);

děkuju

 
Odpovědět
17.7.2018 21:55
Avatar
Odpovídá na Tonda Đình Hoàng
Jakub Všetečka:28.10.2018 21:01

Ahoj,
podle toho co jsem pochopil je to jedno, protože ty zavoláš třídu Bojovnik a nasledně metodu konstruktor Mag, který je její potomek, takže je stejná. Pokud to tak není, tak se omlouvám.

Editováno 28.10.2018 21:01
 
Odpovědět
28.10.2018 21:01
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Tonda Đình Hoàng
pocitac770:28.10.2018 23:31

To první je typ oné konrétní proměnné. Můžrš do ní uložit cokoliv, co je Bojovníkem (tedy jak Bojovníka, tak Mága). Protože překladač neví, co se v ní zrovna konkrétně nachází, maš zpřístupněny pouze metody, které tam stoprocentně jsou => všechny metody bojovníka. Pokud by jsi měl nějakou metodu, kterou má pouze Mág, ale ne Bojovník, neuvidíš ji. Naopak, pokud chceš přistupovat k těmto speciálním metodám, tak musíš k oné instanci přistupovat jako k Mágovi, tam již jdou používat, protože máš jistotu že tam neuložíš primitivnèjšího Bojovníka, co to vše neumí.

Editováno 28.10.2018 23:32
 
Odpovědět
28.10.2018 23:31
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.