回顾流运算符和加减运算符的重载。
重点掌握赋值运算符的重载。
void operator=(const Vector&v);
#include <iostream>
using namespace std;
/*
*作者:youshen_wwd
*时间:2020/5/14
*题目:设向量X=(x1,x2,…,xn)和Y=(y1,y2…,yn),它们之间的加、减分别定义为:
X+Y=(x1+y1, x2+y2,…, xn+yn)
X-Y=(x1-y1, x2-y2,…, xn-yn)
编程序定义向量类Vector ,重载运算符”+”、”-“、”=”,实现向量之间的加、减和赋值运算;
用重载运算符”>>”、”<<”做向量的输入/输出操作。注意检测运算的合法性。
*/
class Vector{//这里仅实现两个三维向量之间的计算
private:
int *Array;
int num;//维度
public:
Vector(int n){//初始化
num=n;
Array=new int [num];
for (int i=0;i<num;i++)
Array[i]=0;
}
friend istream &operator>>(istream &input,Vector &v);
friend ostream &operator<<(ostream &output,Vector &v);
friend Vector operator+(Vector &v1,Vector &v2);
friend Vector operator- (Vector &v1,Vector &v2);
void operator=(const Vector &v2);
};
void Vector::operator=(const Vector &v2){
//=必须作为成员函数重载
num=v2.num;
Array= new int [num];
for (int i=0;i<num;i++){
Array[i]=v2.Array[i];
}
}
Vector operator+(Vector &v1,Vector &v2){
//对+进行重载,这里考虑的是两个维度相等的向量
int n=v1.num;
Vector v(n);
for (int i=0;i<n;i++){
v.Array[i]=v1.Array[i]+v2.Array[i];
}
return v;
}
Vector operator- (Vector &v1,Vector &v2){
//对-进行重载,这里考虑的是两个维度相等的向量
int n=v1.num;
Vector v(n);
for (int i=0;i<n;i++){
v.Array[i]=v1.Array[i]-v2.Array[i];
}
return v;
}
istream &operator>>(istream &input,Vector &v){
//对运算符>>的重载
cout<<"这是一个"<<v.num<<"维的向量"<<endl;
for (int i=0;i<v.num;i++){
cin>>v.Array[i];}
return input;
}
ostream &operator<<(ostream &output,Vector &v){
//对运算符<<重载
for (int i=0;i<v.num;i++){
cout<<v.Array[i]<<" ";}
return output;
}
int main(){
Vector v1(3),v2(3),v3(3);
cout<<"input v1 please:"<<endl;
cin>>v1;
cout<<"input v2 please:"<<endl;
cin>>v2;
v3=v1+v2;
cout<<"v1+v2="<<v3<<endl;
v3=v1-v2;
cout<<"v1-v2="<<v3<<endl;
v3=v2;
cout<<v3;
}