賦值運算子沒有多載成功怎么解?還有一個問題就是好像存在深淺拷貝的問題,但也是不知道怎么解...
#include<iostream>
#include<cstring>
using namespace std;
class Vector
{
private:
double* v;
int len;
public:
friend Vector operator+(Vector& v1, Vector& v2);
friend Vector operator-(Vector& v1, Vector& v2);
friend double& operator*(Vector& v1, Vector& v2);
friend ostream& operator<<(ostream& out, Vector& v1);
friend istream& operator>>(istream& in, Vector& v1);
Vector(int size)//建構式
{
len = size;
v = new double [len];
}
Vector(double* v1, int m)//拷貝構造
{
len = m;
v = new double[len];
v = v1;
}
//Vector(const Vector&vv)
//{
// len=vv.len;
// v=new double[vv.len];
//}
~Vector()
{
if (v != NULL)
{
delete[]v;
v = NULL;
len = 0;
}
}
double& operator[](int i)
{
if (i >= 0 && i < len)
return v[i];
else
cout << "Overflow!" << endl;
}
Vector& operator=(Vector& v1)
{
if (v1.v != NULL)
{
delete[]v;
v = new double[v1.len];
swap(v, v1.v);
return *this;
}
}
};
Vector operator+(Vector& v1, Vector& v2)
{
Vector temp(v1.len);
for (int i = 0; i < temp.len; i++)
{
temp[i] = v1[i] + v2[i];
}
//深拷貝??
/*delete[]v1.v;
v1.v = new double[v1.len];
swap(v1.v, temp.v);*/
return temp;
}
Vector operator-(Vector& v1, Vector& v2)
{
Vector temp(v1.len);
for (int i = 0; i < temp.len; i++)
{
temp[i] = v1[i] - v2[i];
}
return temp;
}
//√
double& operator*(Vector& v1, Vector& v2)
{
double tem=0;
for (int i = 0; i < v1.len; i++)
{
tem = tem + v1[i] * v2[i];
}
return tem;
}
ostream& operator<<(ostream& out, Vector& v1)
{
cout << "(";
for (int i = 0; i < v1.len; i++)
{
if (i != v1.len - 1)
out << v1[i] << ",";
else out << v1[i] << ")" << endl;
}
return out;
}
istream& operator>>(istream& in, Vector& v1)
{
for (int i = 0; i < v1.len; i++)
in >> v1[i];
return in;
}
int main()
{
Vector v1(2);
Vector v2(2);
cout << "請輸入第一個向量:";
cin >> v1;
cout << "請輸入第二個向量:";
cin >> v2;
//呼叫拷貝建構式
//Vector v = v1 + v2;
//呼叫賦值多載函式
Vector v(2);
v = v1 + v2;
cout << "運算結果為: " << v;
}
uj5u.com熱心網友回復:
你的問題很多,比如像operator+ - * /這些函式的引數最好是const T& 而不是 T& ,因為如果是T&不能執行連+-*/還有opertor= 不要用swap 因為用了swap 將改變原物件,這個不合邏輯 ,例如
int a=3;
int b=5;
a=b。a,b都應該等于5,而用swap ,b將發生改變
opertor[] 應該是const的
還有你把copy construct 注釋了,這也是問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269666.html
標籤:C++ 語言
上一篇:PAT 1007
下一篇:小白資料結構的求助
