#include <iostream>
using namespace std;
class Integer
{
protected:
//向量的維度
int n;
};
class Vector :public Integer
{
//輸入向量
friend istream& operator>>(istream&, Vector&);
//輸出向量
friend ostream& operator<<(ostream&, Vector&);
public:
//傳入向量的維度建構式
Vector(int=1);
//復制建構式
Vector(const Vector&);
~Vector();
//向量相加
Vector operator+(Vector&);
//向量內積
double operator*(Vector&);
//向量賦值
Vector& operator=(const Vector&);
//向量判等
bool operator==(const Vector&);
//向量求模
double operator()();
protected:
int* v;
};
Vector::Vector(int Length)
{
if (Length <= 0 || Length>100)
{
cout << "暫時不支持非正維度和高維度的向量運算...\n";
abort();
}
else
{
int Factor = 0;
v = new int[Length];
n = Length;
for (; Factor < n; Factor = Factor + 1) { v[Factor] = 0; }
}
}
Vector::Vector(const Vector& vector)
{
v = vector.v;
n = vector.n;
}
//這個解構式有問題
Vector::~Vector()
{
delete[] v;
v = NULL;
n = 0;
}
//向量相加
Vector Vector::operator+(Vector& vector)
{
if (n == vector.n)
{
int Factor = 0; Vector Temp(n);
for (; Factor < n; Factor = Factor + 1){ Temp.v[Factor] = v[Factor] + vector.v[Factor]; }
return Temp;
}
else
{
cout << "暫時不支持不同維度的向量運算...\n";
abort();
}
}
//向量內積
double Vector::operator*(Vector& vector)
{
if (n == vector.n)
{
int Factor = 0; int Result = 0;
for (; Factor < n; Factor = Factor + 1) { Result = Result + v[Factor] * vector.v[Factor]; }
return Result;
}
else
{
cout << "暫時不支持不同維度的向量運算...\n";
abort();
}
}
//向量賦值
Vector& Vector::operator=(const Vector& vector)
{
if (n == vector.n)
{
int Factor = 0;
for (; Factor < n; Factor = Factor + 1){ v[Factor] = vector.v[Factor]; }
return *this;
}
else
{
cout << "不同維度的向量怎么能夠賦值呢?\n";
abort();
}
}
//向量判等
bool Vector::operator==(const Vector& vector)
{
if (n == vector.n)
{
int Factor = 0;
for (; Factor < n; Factor = Factor + 1)
{
if (v[Factor] == vector.v[Factor]) { continue; }
else { return false; }
}
return true;
}
else { return false; }
}
//向量求模
double Vector::operator()()
{
int Factor = 0; double Model = 0;
for (; Factor < n; Factor = Factor + 1){ Model = double(v[Factor]) * double(v[Factor]); }
Model = sqrt(Model);
return Model;
}
//輸入,輸出向量
istream& operator>>(istream& Input, Vector& vector)
{
int Factor = 0, Length = 0;
cout << "請根據向量的維度輸入資料...";
Length = vector.n;
for (; Factor < Length; Factor = Factor + 1) { cin >> vector.v[Factor]; }
return Input;
}
ostream& operator<<(ostream& Output, Vector& vector)
{
int Factor = 0, Length = 0;
Length = vector.n;
cout << "(";
for (; Factor < Length; Factor = Factor + 1)
{
cout << vector.v[Factor] << ",";
if (Factor == Length - 1) { cout << "\b"; }
}
cout << ")";
return Output;
}
int main()
{
//這是主函式測驗的
Vector Vector_0(2), Vector_1(2), Vector_2(2);
cin >> Vector_0 >> Vector_1 >> Vector_2;
Vector_0 = Vector_1 + Vector_2;
cout << "向量為:" << Vector_0 << "\n";
}
uj5u.com熱心網友回復:
主函式不小心那里打錯了,運行的時候把"Vector_0"洗掉了
,疏忽了,抱歉.。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277854.html
標籤:C++ 語言
上一篇:VS中的Windows桌面應用程式(C++)和MFC程式在代碼上有啥不一樣?
下一篇:新手求助,在下面的引數加上"const"程式就不會報錯了,想知道為什么會這樣,"const"在其中做了什么,感謝各位解答的大佬
