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: Přetížení operátora a více metod v --- ?

Aktivity
Avatar
Cencek
Člen
Avatar
Cencek:11.10.2014 23:48

Takže potřebuju si upravit program tak aby kód fungoval tak že po napsání následujícího kódu se mi do stringu actions v instanci p1 zapíše: Utok, Obrana. Nějaké návrhy jak si mám přetížit operátora << ? a jak by měla obecně vypadat struktura kódu, tím myslím jaké třídy a metody?

Player p1=new Player();
      p1<<Akce.Utok;
      p1<<Akce.Obranaů

Díky za odpověď!

 
Odpovědět
11.10.2014 23:48
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Cencek
Jan Vargovský:11.10.2014 23:57

Operátor << nelze v C# přetížit (a ani v něm neexistuje btw) viz http://msdn.microsoft.com/…edha89s.aspx

 
Nahoru Odpovědět
11.10.2014 23:57
Avatar
Cencek
Člen
Avatar
Odpovídá na Jan Vargovský
Cencek:12.10.2014 0:01

Jestli mě zrak nešálí tak to jde:
http://prntscr.com/4v9jkx

 
Nahoru Odpovědět
12.10.2014 0:01
Avatar
Odpovídá na Cencek
Neaktivní uživatel:12.10.2014 0:06

Existuje, ale tady není důvod ho použít. Každopádně to nemění nic na tom, že ten kód výše bude s největší nesmysl. Pokud máš objekt p1 a v něm vlastnost actions, pak do ní zapíšeš jednoduše takto:

p1.actions = "Utok, Obrana";
Nahoru Odpovědět
12.10.2014 0:06
Neaktivní uživatelský účet
Avatar
Cencek
Člen
Avatar
Odpovídá na Neaktivní uživatel
Cencek:12.10.2014 0:08

To vím ale toto má sloužit jako procvičení přetěžování a bůhví čeho a nemůžu tomu přijít na kloub ... ten kód konečný by měl vypdat takto

Player p1=new Player();
      p1<<Akce.Utok;
      p1<<Akce.Pohyb;
      p1<<Akce.Obrana;
      .
      .
      .
      Console.WriteLine(p1);
Editováno 12.10.2014 0:10
 
Nahoru Odpovědět
12.10.2014 0:08
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Cencek
Jan Vargovský:12.10.2014 1:40

Dobře, sorry, jde to. Ale nejde to tak, jak si ty představuješ. První typ je třída a druhá je int. Jestli je typ tvé Akce enum, tak by se to dalo využít, ale... nedělal bych to.

Když bys měl třídu X, tak můžeš přepsat danou operaci takto:

public static X operator <<(X x, int n)
{
    ...
    return x;
}

Jenže volání nebude probíhat jak si myslíš, protože když bys měl instanci x, tak bys to stejně musel volat jako:

x <<= (int)Akce.Attack;

A uvnitř toho operátoru bys měl velkej switch/řadu podmínek pro volání každé z těch akcí (čti metod).

... Teď ještě čtu co si fakt chtěl a ono je to stejné, akorát bys místo volání metody přidával ke stringu hodnotu.

Radši si udělej nějakou metodu, využij params a udělej něco takového.

public void AddAction(params Akce[] akce)
{
    actions += string.Join(", ", akce);
}

a volání pak na instanci x:

x.AddAction(Akce.Att, Akce.Def, Akce.Def);

EDIT: Rada na závěr, nemíchej angličtinu s češtinou :) (Ano já to taky udělal, ale protože jsem použil část tvého a přidal k němu můj.

Editováno 12.10.2014 1:42
 
Nahoru Odpovědět
12.10.2014 1:40
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:12.10.2014 1:44

Ještě k tomu, že ten operátor neexistuje: koukám na seriály a holt jsem zapomněl na bitové posuny no.

 
Nahoru Odpovědět
12.10.2014 1:44
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 7 zpráv z 7.