我有以下簡單的向量類,我可以在其中定義不同大小的向量並對它們進行求和;我已經重載了+運算符並且包含一個簡單的數據顯示方法desplegar();類被定義爲:當它們作爲C++參數傳遞給函數時被修改的對象
class Cvector{
private:
int dim;
float * C;
public:
Cvector(){};
Cvector(int n){dim=n; C = new float[dim];};
~Cvector(){delete [] C;};
int getdim(){return dim;};
float getC(int i){
if(i<dim && i>=0)
return C[i];
else
return 0;
};
void setC(int i, float x){
if(i<dim && i>=0)
C[i]=x;
}
void desplegar(){
cout<<"[ ";
for(int i=0;i<dim;i++)
cout<<getC(i)<<" ";
cout<<" ]"<<endl;
}
Cvector operator + (Cvector);
};
Cvector Cvector::operator + (Cvector A){
int n;
if(A.getdim()>dim)
n=A.getdim();
else
n=dim;
Cvector temp(n);
for(int i=0;i<n;i++)
temp.setC(i,getC(i)+A.getC(i));
return temp;
}
當我運行下面的代碼,一切正常:
Cvector X(2);
Cvector Y(3);
定義維度2的對象和3
X.setC(0,1);
X.setC(1,4);
Y.setC(0,0);
Y.setC(1,6);
Y.setC(2,9);
增加相應的值(X代表2個,Y代表3個)
X.desplegar();
Y.desplegar();
Cvector T=Y+X;
T.desplegar();
一切都顯示正確,直到這裏,T顯示向量Y和向量X,這正是我想要的總和。但是,當我運行
X.desplegar();
它只是從內存中顯示不相關的數據,似乎當它作爲參數傳遞給運營商+通過了對象X被修改,爲什麼會這樣?如果我使用指向這些對象的指針,這種情況不會發生,但它看起來並不直觀。
任何人都可以評論?
*可能*你需要執行'operator ='或者該賦值可能會混淆你的一個傳入操作數。另外,你真的應該傳遞'const'引用而不是傳遞值並且瞭解[[three]的規則](http://en.wikipedia.org/wiki/Rule_of_three_(C++ _ programming))。 –