/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Private scope ved pointer til class i clas~
Fra : JS


Dato : 23-09-02 20:47

Jeg har noget kode i stil med nedenstående.

Det undrer mig lidt at det er muligt i en hvilken som helst instans af test
at accesse private data i de andre instanser via en pointer til klassen ?
Er det helt legalt ?


(Princip kode , kan muligvis ikke kompileres...)

class test
{
public:

test(int _data);
int getdata(int index);

private :
static std::vector<test*> testList;
int data;
};

test::test(int _data)
{
testList.push_back(this);
data = _data;
}

int test::getdata(int index)
{
if(index < testList.size())
{
return testList[index]->data;
}
}


mvh/JS



 
 
Igor V. Rafienko (23-09-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 23-09-02 21:25

[ mr_nobody@nowhere.com ]

[ ... ]

> Det undrer mig lidt at det er muligt i en hvilken som helst instans
> af test at accesse private data i de andre instanser via en pointer
> til klassen ? Er det helt legalt ?


Ja, det er helt lovlig per definition (ISO/IEC 14882:1998(E), ch 11, p
1).

En annen ting er at man vil sannsynligvis ha slik oppførsel: tenk at
man skal lage en implementasjon av op=() som bruker en
implementasjonsegenskap som ellers ikke er synlig (fx. av
effektivitetshensyn). Da er det meget rimelig at i

a = b;

.... skal a få tilgang til b's private data. De to instansene er
strukturelt sett helt like, og jeg har problemer med å forstå hvorfor
man skulle begrense adgang "innenfra" samme type.

[ ... ]





ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste