PDA

View Full Version : Suggerimento c++...


pinzi
08-01-2004, 15:34
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);
};

cionci
08-01-2004, 15:57
Perchè non usi l'operatore [] ?

pinzi
09-01-2004, 14:58
potresti essere più chiaro?

cionci
09-01-2004, 15:10
float &vector::operator[](int index){
return value[index-1];
}

Non capisco cosa vuoi fare con questo operatore, ma lo copio così com'è:

float &vector_double::operator[](int index){
if((*first)[index] > (*second)[index]){
return (*first)[index];
}
return (*second)[index];
}

Comunque mi sembra che tu abbia una grande confusione sul linguaggio... Il ; dopo la } è necessario solamente dopo struct o class (se non sbaglio)...
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...

pinzi
09-01-2004, 15:53
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.

cionci
09-01-2004, 15:58
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++...