.[ ČeskéHry.cz ].
Rozhraní pro přístup k privátním proměnným objektu
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 18. leden 2011, 00:43:21    Předmět: Rozhraní pro přístup k privátním proměnným objektu Odpovědět s citátem

Ahoj,

snažím se vymyslet něco co bude fungovat jako rozhraní pro přístup k privátním proměnným objektu (v tom kódu co posílám je to velmi zjednodušeně, jde o to, že při přiřazování hodnot se bude provádět určitá kontrola a podobně), aby se nemuselo používat něco ve stylu Objekt -> NastavHodnotuAtributu( Hodnota ) pro uložení a Objekt -> VratHodnotuAtributu() pro vrácení hodnoty.

Mám tedy přetížený operátor = tak, aby ukládal do struktury hodnoty (například Objekt -> Atribut = 5), teď mi jde ale o to, jestli je možné nějak docílit toho, aby samostatný Objekt -> Atribut nesl "svoji" hodnotu, tzn. v tomto případě 5 tak abych mohl napsat int Promenna = Objekt -> Atribut.

http://pastebin.com/LgYGEg0D

Moc děkuji za rady Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 18. leden 2011, 08:31:08    Předmět: Odpovědět s citátem

public: Question
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 18. leden 2011, 09:00:27    Předmět: Odpovědět s citátem

No vzhledem k tomu, že C++ nemá properties, tak správně je public proměnná, a pokud chceš nějaký kód reagující na čtení/přiřazení, tak přes Get/Set metody. Tedy nebylo by to C++, aby tam ty properties nešly doprogramovat, více zde: http://www.google.cz/search?q=c%2B%2B+properties
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fremen



Založen: 30. 12. 2008
Příspěvky: 9

PříspěvekZaslal: 18. leden 2011, 09:26:24    Předmět: Odpovědět s citátem

Použití properties:

kód:
class test
{
private:
   int m_nPom;

public:
   void set_pom(int p)
   {
      m_nPom = p;
   }
   int get_pom()
   {
      return m_nPom;
   }
   __declspec(property(get = get_pom, put = set_pom)) int x;
};

int main()
{
   test t;
   t.x = 2;
   int res = t.x;
   printf("%d",res);

   return 0;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. leden 2011, 09:33:17    Předmět: Odpovědět s citátem

@Fremen - to bude asi dost M$ specific, co? Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fremen



Založen: 30. 12. 2008
Příspěvky: 9

PříspěvekZaslal: 18. leden 2011, 09:39:05    Předmět: Odpovědět s citátem

Non M$ specific:

http://www.codeproject.com/KB/cpp/cppproperties.aspx

PS: Sice taky v práci vyvíjíme na jiných platformách a s jinými kompilátory, ale tady předpokládám, že většina stejně používá MSVC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 18. leden 2011, 10:05:49    Předmět: Odpovědět s citátem

Příkláním se k public:, cokoliv jinýho je jenom syntaktický cukr.

get/set metody pouze pokud chcete zakázat použití unárního operátoru &.

Ten článek, co poslal Fremen, je asi nejhorší řešení, protože to jenom zasírá kód dalšíma sračkama a nepřínáší to nic navíc kromě onanie nad šablonama.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 18. leden 2011, 10:10:52    Předmět: Odpovědět s citátem

Souhlasím s řešením "public".

Pokud chceš přistupovat k proměnné z jiných objektů tak, že je chceš měnit i získávávat, tak už je jedno, jestli je máš public, nebo to nějak obejdeš okolo jen protože někdo řekl, že "public" se u proměnných nepoužívá.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Fremen



Založen: 30. 12. 2008
Příspěvky: 9

PříspěvekZaslal: 18. leden 2011, 10:24:27    Předmět: Odpovědět s citátem

Já samozřejmě také souhlasím s veřejným přístupem Wink, ale reagoval jsem na první příspěvek v tomto threadu:
citace:
snažím se vymyslet něco co bude fungovat jako rozhraní pro přístup
k privátním proměnným objektu

Třeba chce Solid.Sn pouze prozkoumávat možnosti C/C++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 18. leden 2011, 11:40:33    Předmět: Odpovědět s citátem

Fremen napsal:

citace:
snažím se vymyslet něco co bude fungovat jako rozhraní pro přístup
k privátním proměnným objektu

Třeba chce Solid.Sn pouze prozkoumávat možnosti C/C++.


Je to spíš tak, že zkouším... Smile koždopádně jsem přišel na to, že stačí přetížit operátor int() viz. http://pastebin.com/4aq8DB1F a funguje to přesně tak jak jsem potřeboval.

Děkuji za rady
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. leden 2011, 12:04:44    Předmět: Odpovědět s citátem

no ale bez sablony to bude silne int based a zadnou jinou property nerozchodis ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 18. leden 2011, 12:49:32    Předmět: Odpovědět s citátem

rezna napsal:
no ale bez sablony to bude silne int based a zadnou jinou property nerozchodis ...


Už na to mám i šablonu. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 18. leden 2011, 15:09:13    Předmět: Odpovědět s citátem

Public je sice krásné jednoduché řešení, ale jak to tak bývá, je taky špatně Wink Autor psal, že potřebuje reagovat na změnu nebo kontrolovat hodnotu. A to se bez setteru neobejde...
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 18. leden 2011, 16:50:10    Předmět: Odpovědět s citátem

V tomto tvaru jsem to chtěl použít na všechny properties, ale jak se dalo očekávat je to o dost pmalejší, než mít ty proměnné jako public.

Takže to pravděpodobně udělám tak, že hodnoty, které nebudou potřebovat kontrolu nebo reakci na změnu, budou opravdu public a hodnoty u kterých bude potřeba vyvolávat tyto události budou typu PROPERTY.

Taky jsem zkoušel srovnání nastavení a vracení hodnot klasicky pomocí metod SetValue / GetValue a rychlostně jsou na tom defakto úplně stejně jako hodnoty pouřívající pro nastavení a vracení třídu PROPERTY. Dokonce na 10 milionech přístupů byly hodnoty vracené a nastavované pomocí PROPERTY o něco málo rychlejší. Smile



http://pastebin.com/Unh3r23Q
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. leden 2011, 17:30:53    Předmět: Odpovědět s citátem

a testujes to doufam v releasu a se zapnutyma optimalizacema na max?

samozrejme ze prime prirazeni hodnoty je vzdycky rychlejsi, ale setter by nemel byt o tolik pomalejsi ...

dat neco jako public ja a priori spatne, a je to premature optimization, pokud nerekne nejakej software ze toto je opravdu bottleneck
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna