c++运算符重载问题(重写向量类)

#include<iostream>
using namespace std;
class vector{
 public:
  int *v;
  int len;
 public:
  vector(int=1);
  vector(const int *,int);
  ~vector();
  int & operator[](int)const;
  int operator()()const;
  vector & operator=(const vector &);
  friend vector operator+(const vector &,const vector &);
  friend vector operator-(const vector &,const vector &);
  friend vector operator *(const vector &,const vector &);
  friend ostream & operator<<(ostream &output,vector &);
  friend istream & operator>>(ostream &input,vector &);
  
  bool operator==(const vector &)const;
};
vector::vector(int size){
 if(size<=0||size>=100){
  cout<<"The size of"<<size<<"is fail!\n";
  exit(0);
 }
 v=new int[size];
 for(int i=0;i<size;i++){
  v[i]=0; 
 }
 len=size; 
}
vector::vector(const int *b,int size){
 if(size<=0 || size>=100){
  cout<<"The size of"<<size<<"is fail!\n";
  exit(0);
 }
 v=new int[size];
 len=size;
 for(int i=0;i<size;i++){
  v[i]=b[i];
 }
}
vector::~vector(){
 delete[]v;
 len=0;
}
int & vector::operator[](int i)const{
 if(i>=0 && i<len)
      return v[i];
    cout<<"The subscript"<<i<<"is outside!\n";
    exit(0);
}
int vector::operator()()const{
 return len;
}
vector & vector::operator=(const vector & B){
 if(len==B.len){
  for(int i=0;i<len;i++){
   v[i]=B.v[i];
  }
  return *this;
 }
 else{
  cout<<"operator=fail!\n";
     exit(0);
 }   
}
vector operator+(const vector & A,const vector & B){
 int size=A();
 int *T=new int [size];
 if(size==B()){
  for(int i=0;i<size;i++){
   T[i]=A.v[i]+B.v[i];
  }
  return vector(T,size);
 }
 else cout<<"operator+fail!\n";
 exit(0); 
}
vector operator-(const vector & A,const vector & B){
 int size=A();
 int *T=new int [size];
 if(size==B()){
  for(int i=0;i<size;i++){
   T[i]=A.v[i]-B.v[i];
  }
  return vector(T,size);
 }
 else cout<<"operator-fail!\n";
 exit(0); 
}
vector operator *(const vector & A,const vector & B){
 int size=A();
 int *T=new int [size];
 if(size==B()){
  for(int i=0;i<size;i++){
   T[i]=A.v[i] * B.v[i];
  }
  return  vector(T,size);
 }
 else  cout<<"operator * fail!\n";
 exit(0);
}
ostream & operator<<(ostream & output,vector & A){
 for(int i=0;i<A();i++){
  cout<<A.v[i]<<" ";
 }
 return output;
}
istream & operator>>(istream & input,vector & B){
 for(int i=0;i<B();i++){
  cin>>B.v[i];
 }
 return input;
}


int main(){
 int k;
 cout<<"input the length of vector:\n";
 cin>>k;
 vector A(k),B(k),C(k);
 cout<<"input the elements of vector A:\n";
 cin>>A;
 cout<<"input the elements of vector B:\n";
 cin>>B;
    cout<<"output the elements of vector A:\n";
    cout<<A<<endl;
    cout<<"output the elements of vector B:\n";
    cout<<B<<endl;
   
 for(int i=0;i<A.len;i++){
   C[i]=A[i] * 2;
  }
 cout<<"output the elements of vector A * 2:\n";
    cout<<C<<endl;
 C=A * B;
    cout<<"output the elements of vector A * B:\n";
    cout<<C<<endl;
   
    C=A + B;
    cout<<"output the elements of vector A + B:\n";
    cout<<C<<endl;
}

为了这点代码,脑子都快炸了,思路简单,但是错误很多
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值