|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[PILLOLA]Proprietà in C++
Ecco come ottenere una proprietà di un oggetto ( cioè un set/get su di esso) con un unica funzione:
Codice:
#include <iostream>
using std::cin;
using std::cout;
class Prova
{
private:
int n;
public:
Prova()
{
n = 0;
};
~Prova()
{
};
inline int& N()
{
return n;
}
inline void print()
{
cout << n << std::endl;
}
};
int main(int argc, char * argv[])
{
Prova* p = new Prova();
p->print();
p->N() = 19; // set
p->print();
p->N() = 30; // set
p->print();
int nn = p->N(); //get
cout << nn << std::endl;
delete p;
cin.get();
return 0;
}
ciauz
__________________
Gnu/Linux User
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sono queste le bellezze del c++ che non capirò mai; se hai bisogno di una simile funzione N(), perché non dichiarare direttamente "n" come pubblico?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
se volessi controllare l'input da inserire?
E cmq questo java nn lo ha e C#( bleah) lo implementa con 2 costrutti(get, set) E poi fa figo :=)
__________________
Gnu/Linux User
Ultima modifica di Luc@s : 26-01-2004 alle 15:34. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Mettiamo che un aggiornamento dell'oggetto rinomini la variabile interna da n a num... Mettendo n pubblica tutte i sorgenti che utilizzano n dovranno essere cambiati...mentre con una funzione di accesso come N() se cambia la rappresentazione interna non ci importa niente... |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Codice:
class pippo {
public:
union {
int n;
int num;
};
(...)
};
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 26-01-2004 alle 16:03. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vabbè ma questo è un caso semplice...metti caso che l'aggiornamento sposti n all'interno di un altro oggetto... Come fai ?
Con questo non voglio dire che una funzione del genere la utilizzerei... Utilizzerei comunque due metodi GetN e SetN Ad esempio: Codice:
class Prova
{
private:
int n;
public:
Prova()
{
n = 0;
};
inline int& N()
{
return n;
}
Codice:
class Prova
{
private:
class conf {
int n;
int n2;
friend Prova;
public:
conf() {};
};
public:
Prova()
{
n = 0;
};
inline int& N()
{
return conf.n;
}
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Codice:
class Prova {
public:
int &n;
private:
class xyz {
public:
int y;
(...)
} num;
public:
Prova(): n(num.y) { }
(...)
};
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vabbè è vero, ma mi sembra un po' un accrocco, no ?
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
(*) Object Disoriented
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Bello OD
Tra l'altro il fatto di rendere pubblico un attributo in questo modo è contrario all'information hiding |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E per una cosa del genere come faresti ?
Codice:
class Prova
{
private:
class conf {
int n;
int n2;
public:
void SetN();
void GetN();
conf() {};
} _conf;
public:
(....)
};
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Vuoi veramente inorridire? Codice:
class Prova {
public:
int &n;
int &n2;
private:
class conf {
int n;
int n2;
public:
void SetN();
void GetN();
conf() {};
} _conf;
public:
Prova(): n(*(int *)&_conf), n2(*((int *)&_conf+1)) {}
};
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
alla fine sconsigliate il mio modo di agire???
__________________
Gnu/Linux User
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Imho sempre meglio agire con due metodi
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
P.s: che ne pensi di visual assist x VC++6???? P.P.S: come si installano le Stl SGI si VC++6?
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Basta semplicemente copiarle sopra alle originali... |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
mi dai il link da dove scaricarle???
Quindi posso sovrascrivere senza paranoie?
__________________
Gnu/Linux User
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:11.



















