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
|
Zaslal: 18. leden 2011, 00:43:21 Předmět: Rozhraní pro přístup k privátním proměnným objektu |
|
|
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  |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 18. leden 2011, 08:31:08 Předmět: |
|
|
public:  _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 18. leden 2011, 09:00:27 Předmět: |
|
|
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 |
|
 |
Fremen

Založen: 30. 12. 2008 Příspěvky: 9
|
Zaslal: 18. leden 2011, 09:26:24 Předmět: |
|
|
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 |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. leden 2011, 09:33:17 Předmět: |
|
|
@Fremen - to bude asi dost M$ specific, co?  |
|
Návrat nahoru |
|
 |
Fremen

Založen: 30. 12. 2008 Příspěvky: 9
|
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. leden 2011, 10:05:49 Předmět: |
|
|
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 |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 18. leden 2011, 10:10:52 Předmět: |
|
|
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 |
|
 |
Fremen

Založen: 30. 12. 2008 Příspěvky: 9
|
Zaslal: 18. leden 2011, 10:24:27 Předmět: |
|
|
Já samozřejmě také souhlasím s veřejným přístupem , 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 |
|
 |
Solid.Sn
Založen: 08. 08. 2009 Příspěvky: 55
|
Zaslal: 18. leden 2011, 11:40:33 Předmět: |
|
|
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... 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 |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. leden 2011, 12:04:44 Předmět: |
|
|
no ale bez sablony to bude silne int based a zadnou jinou property nerozchodis ... |
|
Návrat nahoru |
|
 |
Solid.Sn
Založen: 08. 08. 2009 Příspěvky: 55
|
Zaslal: 18. leden 2011, 12:49:32 Předmět: |
|
|
rezna napsal: |
no ale bez sablony to bude silne int based a zadnou jinou property nerozchodis ... |
Už na to mám i šablonu.  |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 18. leden 2011, 15:09:13 Předmět: |
|
|
Public je sice krásné jednoduché řešení, ale jak to tak bývá, je taky špatně Autor psal, že potřebuje reagovat na změnu nebo kontrolovat hodnotu. A to se bez setteru neobejde... _________________ Mám strach |
|
Návrat nahoru |
|
 |
Solid.Sn
Založen: 08. 08. 2009 Příspěvky: 55
|
Zaslal: 18. leden 2011, 16:50:10 Předmět: |
|
|
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ší.
http://pastebin.com/Unh3r23Q |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. leden 2011, 17:30:53 Předmět: |
|
|
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 |
|
 |
|