Diskuze: Pomoc s kódem

C# .NET .NET (C# a Visual Basic) Pomoc s kódem American English version English version

Aktivity (1)
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 11:30

zdravím,
potřeboval bych pomoct s kódem, trápil sem se s tím několik hodin a už sem to vzdal.

jde o tohle:
továrna - metoda: vyrob banánové cukroví)
- metoda udělá to cukroví a vrátí ho

public Cukrovi VyrobBananove()
{
Cukrovi bananove = new Cukrovi();
return bananove;
}

Předem díky za pomoc.

Odpovědět 15.4.2013 11:30
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Odpovídá na N-nojmi
Luboš Běhounek (Satik):15.4.2013 11:31

A v čem je problém? Ta funkce vyrobí cukroví a vrátí ho, to má, ne?

Nahoru Odpovědět  +1 15.4.2013 11:31
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 11:33

Ta metoda by asi měla být statická.

Nahoru Odpovědět 15.4.2013 11:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 11:34

problém je v tom že new Cukrovi ... mam podtržené
a píše to chybu : ConsoleApplica­tion1.Cukrovi' does not contain a constructor that takes 0 arguments

Nahoru Odpovědět 15.4.2013 11:34
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na N-nojmi
Honza Bittner:15.4.2013 11:35

a máš třídu Cukrovi s konstruktorem Cukrovi() ??

Nahoru Odpovědět 15.4.2013 11:35
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/ama.
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 11:37

myslim, že ano..

class Cukrovi
{
public string barva;
public string tvar;
public int vaha;

public Cukrovi(string b, string t, int v)
{
barva = b;
tvar = t;
vaha = v;

}

Editováno 15.4.2013 11:37
Nahoru Odpovědět 15.4.2013 11:37
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 11:38

A ten konstruktor Cukrovi() máš kde?

Nahoru Odpovědět 15.4.2013 11:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
N-nojmi
Člen
Avatar
Odpovídá na Kit
N-nojmi:15.4.2013 11:39

No ve třídě Cukroví

Nahoru Odpovědět 15.4.2013 11:39
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 11:40

Nevidím ho tam. Máš tam jen konstruktor

Cukrovi(string b, string t, int v)
Nahoru Odpovědět 15.4.2013 11:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ivikej
Neregistrovaný
Avatar
ivikej:15.4.2013 11:40
public struc Cukrovi
{

}

class Bananove : Cukrovi
{

}

Je logičtější...

 
Nahoru Odpovědět 15.4.2013 11:40
Avatar
N-nojmi
Člen
Avatar
Odpovídá na ivikej
N-nojmi:15.4.2013 11:42

Já myslel, že tohle celý je konstruktor

public Cukrovi(string b, string t, int v)
{
barva = b;
tvar = t;
vaha = v;
}
Editováno 15.4.2013 11:42
Nahoru Odpovědět 15.4.2013 11:42
Není hloupých lidí, jen lidí co málo používají google...
Avatar
paanoik
Člen
Avatar
Odpovídá na N-nojmi
paanoik:15.4.2013 11:45

to je, ale voláš ho
Cukrovi bananove = new Cukrovi();
přičemž reálně ten konstruktor čeká tři parametry, ty mu nedáváš žádný .. proto ti hlásí, že
does not contain a constructor that takes 0 arguments

 
Nahoru Odpovědět 15.4.2013 11:45
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 11:45

To ano, ale místo něj voláš konstruktor Cukrovi(), který neexistuje.

Editováno 15.4.2013 11:46
Nahoru Odpovědět 15.4.2013 11:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na N-nojmi
Honza Bittner:15.4.2013 11:46

v kódu máš :

Cukrovi bananove = new Cukrovi();

ale konstruktor máš :

public Cukrovi(string b, string t, int v)
 {
 barva = b;
 tvar = t;
 vaha = v;
 }

....
tzn dej si do kódu :

Cukrovi bananove = new Cukrovi(barva, tvar, vaha);
Nahoru Odpovědět 15.4.2013 11:46
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/ama.
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 11:47

Dobře děkuju za radu ;)

Editováno 15.4.2013 11:48
Nahoru Odpovědět 15.4.2013 11:47
Není hloupých lidí, jen lidí co málo používají google...
Avatar
paanoik
Člen
Avatar
paanoik:15.4.2013 11:48

Tak mě napadá, pokud chceš ty parametry dobrovolné, udělej si ty konstruktory dva ..

public Cukrovi(string b, string t, int v)
 {
  barva = b;
  tvar = t;
  vaha = v;
 }

//nový "default" konstruktor
public Cukrovi()
 {
  barva = "hnědá";
  tvar = "šroubovice";
  vaha = 100;
 }
 
Nahoru Odpovědět 15.4.2013 11:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 11:50

Třeba takto:

public static Cukrovi VyrobBananove() {
   Cukrovi bananove = new Cukrovi("žlutá", "banán", 100);
   return bananove;
}
Nahoru Odpovědět 15.4.2013 11:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 11:52

Už to fachá ;) díky vám

Nahoru Odpovědět 15.4.2013 11:52
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na N-nojmi
Petr Nymsa:15.4.2013 11:56

Každopáně výsledek je asi ten, že ti to funguje, ale nevíš absolutně proč :) nebo se pletu ? Podívej se na základy C# a potom i OOP, zjevně nevíš jak vůbec funguje kontruktor

Nahoru Odpovědět 15.4.2013 11:56
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na paanoik
Kit:15.4.2013 12:02

Takhle bych to určitě nedělal. Nezapomeň, že asi bude chtít mít víc druhů cukroví. Přece nebude dělat jen hnědé ve tvaru šroubovice.

Nahoru Odpovědět 15.4.2013 12:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 12:03

Situace je taková že se teprve učím OOP a jsem začátečník. a s return dělám poprvé a ano budu dělat 3 druhy cukroví

Editováno 15.4.2013 12:04
Nahoru Odpovědět 15.4.2013 12:03
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:15.4.2013 12:03

Podle mě to není špatný. Když nezadá parametry vytvoří se defaultní cukroví

Nahoru Odpovědět 15.4.2013 12:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na N-nojmi
Petr Nymsa:15.4.2013 12:04

Však nikdo to nemyslí zle. Projeď si kompletně základy a pomalinku začni s OOP :)

Nahoru Odpovědět 15.4.2013 12:04
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
N-nojmi
Člen
Avatar
N-nojmi:15.4.2013 12:07

Také to dělám, nastal zádrhel a proto sem napsal sem o radu ;)

Nahoru Odpovědět 15.4.2013 12:07
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Kit
Redaktor
Avatar
Odpovídá na N-nojmi
Kit:15.4.2013 12:08

Přetěžování konstruktorů si můžeš klidně nechat na později.

Nahoru Odpovědět 15.4.2013 12:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:15.4.2013 12:14

Kvůli tomu přece dělá továrnu na cukroví, aby defaultní cukroví nevyráběl. Akorát se továrna píše trochu jinak.

Nahoru Odpovědět 15.4.2013 12:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hynek
Redaktor
Avatar
David Hynek:15.4.2013 12:17

Těsně před Vánocema, v jedné Pražské rodince. Matka je upatlaná od těsta na linecké, v troubě se pomalu připalují rohlíčky. Nebohá žena nestíhá. Do této sváteční atmosféry vtrhne do kuchyně Pepíček a plný nadšení volá, "Mamí, napsal jsem to v OOP program na pečení cukroví!".

Nahoru Odpovědět 15.4.2013 12:17
Čím víc vím, tím víc věcí nevím.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:15.4.2013 12:20

To je fakt. Ale nechat tam tu možnost podle mě není úplně špatně.

Nahoru Odpovědět 15.4.2013 12:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Hynek
Kit:15.4.2013 12:22

Spíš: "Mamí, napsal jsem v OOP továrnu na pečení cukroví!" :)

Nahoru Odpovědět  +1 15.4.2013 12:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:15.4.2013 12:35

Jednodušší a systematičtější je místo dalšího konstruktoru jen přidat do továrny větev "default".

Nahoru Odpovědět  +2 15.4.2013 12:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:15.4.2013 12:37

Jo to je asi lepší řešení

Nahoru Odpovědět 15.4.2013 12:37
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
paanoik
Člen
Avatar
Odpovídá na Kit
paanoik:15.4.2013 12:40

Jasně že jo, ale tak tady hlavně evidentně nejde o factory, ale spíš "trenažér" pro pochopení, jak to funguje a jak se to chová. Přidat si tam druhý konstruktor a pochopit jak funguje přetěžování čili že metody nemusí mít jen jediný předepsaný vstup (což svádí k procedurálnímu použití) imo právě k těm základům patří.

 
Nahoru Odpovědět 15.4.2013 12:40
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 32 zpráv z 32.