|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Suggerimento c++...
Salve
avrei bisogno di un suggerimento circa il programma che riportato di seguito. Questo funziona correttamente ma purtroppo per far si che esso allochi la memoria dinamicamente ho dovuto dichiare gli elementi first e second della classe double_vector come puntatori ma cosi facendo all'interno della classe double_vector sono costretto ad usare l'oiperatore () della classe vector nel seguente modo: (*first)(index) sinceramente questa soluzione è stilisticamente brutta anche se funziona correttamente. Qualcuno può suggerirmi un alternativa a questa implementazione? Saluti Enrico #include<iostream> using namespace std; class vector{ float *value; int length; public: vector(){ length=1; value=0; }; vector(float *init,int dimension){ length=dimension; value=new float[dimension]; for (int i=1;i<=dimension;i++){ value[i-1]=init[i-1]; }; }; float operator()(int index){ return value[index-1]; }; }; class double_vector{ vector *first; vector *second; public: double_vector(float *init1,int dimension1,float *init2,int dimension2){ first=new vector(init1,dimension1); second=new vector(init2,dimension2); }; float result; float operator()(int index){ if(first->operator()(index)>second->operator()(index)){ result=(*first)(index); } else{ result=second->operator()(index); }; return result; }; }; int main (){ float a[]={1,2,3}; float b[]={3,2,1}; double_vector c(a,3,b,3); cout<<c(1)<<"\t"<<c(2)<<"\t"<<c(3); }; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè non usi l'operatore [] ?
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
potresti essere più chiaro?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Codice:
float &vector::operator[](int index){
return value[index-1];
}
Codice:
float &vector_double::operator[](int index){
if((*first)[index] > (*second)[index]){
return (*first)[index];
}
return (*second)[index];
}
Perchè hai dichiarato una variabile globale di tipo result ? Poi chiamare una classe vector è furviante perchè esiste già una classe vector (per la verità un template) nella standard C++ library... |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Hai ragione riguardo il ; però per abitudine lo uso sempre ed inoltre così il programma mi sembra più ordinato. Riguardo alla variabile result non era mi era intezione dichiarla come globale in verità doveva essere all'interno della funzione:
float operator()(int index) Inoltre riguardo ai nomi delle classi ai ragione vector è una classe delle STL e cio potrebbe creare dei conflitti ma tieni presenti che il programma che ho illustrato nel FORUM non è il programma a cui sto lavorando. Infatti il programma a cui sto lavorando è molto più grande di quello che ho presentato così per semplicità ne ho preparato uno che ne riassumesse il problema. Ad ogni modo ho inteso il tuo suggerimento però non capisco il vantaggio di usare l'operatore [] rispetto a quello (). Tiene che il mio problema è che vorrei scrivere: first[index] invece di (*first)[index] cioè vorrei evitare di usare l'operatore di deferenziazione. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In tal caso non lo puoi usare...a meno di non dichiarare alias...
vector &a = *first; vector &b = *second; Il vantaggio nell'uso delle [] è che lasci l'uso della classe coerente con l'uso dei vettori in C e C++... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:47.



















