重载运算符的问题

szqh97 2008-11-02 10:27:22
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class vector
{
public:
vector(int size=1);//默认的构造函数;
vector(int *,int );
vector( vetor&);
~vector();
int &operator[](int i);
int operator()();
vector&operator=(vector&);
friend vector operator+(vector&,vector&);
friend ostream&operator <<(ostream&,vector&);
friend istream&operator>>(istream&,vector&);
private:
int *v;
int len;
};
vector::vector(int size)//带有默认参数的构造函数,下面的是构造函数的重载
{
if (size<=0||size>100)
{
cout<<"the size of "<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
len=size;
for(int i=0;i<size;++i)
v[i]=0;
}
vector::vector(vector&obj)
{
v=new int [obj()];
len=obj();
for(int i=0;i<obj();i++)
v[i]=obj[i];
}
vector::vector(int *b,int size)//带有参数的构造函数
{
if(size<=0||size>100)
{
cout<<" the size of"<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
for(int i=0;i<=size;i++)
v[i]=b[i];
len=size;
}
int &vector::operator [] (int i)//重载[]返回向量中的一个值
{
if(i>=0&&i<100)return v[i];
cout<<"the subscript"<<i<<"is outside!"<<endl;
abort();
}
int vector::operator () ()//重载()返回向量的维数;
{
return len;
}
vector&vector::operator =(vector&obj)//重载=赋值到另外一个向量中去
{
if(len==obj()) //已经对()进行了重载其返回值为int型可以直接赋值
{
for(int i=0;i<obj();i++)
v[i]=obj[i];
return *this;
}
else
{
cout<<" operator= fail!"<<endl;
abort();
}
}
vector operator+(vector&obj1,vector&obj2)//重载+运算
{
int size=obj1();
if(size!=obj2()) //首先判断两个向量是不是维数相同。如果不满足就结束函数
{
cout<<"operator + fail!"<<endl;
exit(0);
}
int *t=new int (size);
for(int i=0;i<size;i++)
{
t[i]=obj1[i]+obj2[2];
}
return vector(t,size);
//vector tem(obj1());
//for(int i=0;i<obj1();i++)
//{ tem[i]=obj1[i]+obj2[i];
//return tem;
}
ostream&operator<<(ostream&output,vector&obj)//重载<<
{
for(int i=0;i<obj();i++)
cout<<obj[i]<<",";
return output;
}
istream&operator >>(istream&input,vector&obj)
{
for(int i=0;i<obj();i++)
cin>>obj[i];
return input;
}
void main()
{
int k1,k2,k3;
cout<<"input the length of vector A:"<<endl;
cin>>k1;
vector*A=new vector(k1);
cout<<"input the element of vectorA:"<<endl;
cin>>*A;
cout<<"input the length of vector B :"<<endl;
cin>>k2;
vector*B=new vector(k2);
cout<<"input the element of vector B:"<<endl;
cin>>*B;
cout<<"input the length of vector C:"<<endl;
cin>>k3;
vector*C=new vector(k3);
*C=*A+*B;
cout<<"["<<*A<<"]+["<<*B<<"]=["<<*C<<"]"<<endl;
}

还有三个错误,但是不知道怎么改了,帮忙改一下
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolfdog1111 2008-11-04
  • 打赏
  • 举报
回复
mark
nsh_nsh 2008-11-03
  • 打赏
  • 举报
回复
lbjfeng 2008-11-03
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class vector
{
public:
vector(int size=1);//默认的构造函数;
vector(int *,int );
vector( vetor&); //写错了[/ color]
~vector();
int &operator[](int i);
int operator()();
vector&operator=(vector&);
friend vector operator+(vector&,vector&);
friend ostream&operator <<(ostream&,vector&);
friend istream&operator>>(istream&,vector&);
private:
int *v;
int len;
};
vector::vector(int size)//带有默认参数的构造函数,下面的是构造函数的重载
{
if (size<=0||size>100)
{
cout<<"the size of "<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
len=size;
for(int i=0;i<size;++i)
v[i]=0;
}
vector::vector(vector&obj)
{
v=new int [obj()];
len=obj();
for(int i=0;i<obj();i++)
v[i]=obj[i];
}
vector::vector(int *b,int size)//带有参数的构造函数
{
if(size<=0||size>100)
{
cout<<" the size of"<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
for(int i=0;i<=size;i++)
v[i]=b[i];
len=size;
}
int &vector::operator [] (int i)//重载[]返回向量中的一个值
{
if(i>=0&&i<100)return v[i];
cout<<"the subscript"<<i<<"is outside!"<<endl;
abort();
}
int vector::operator () ()//重载()返回向量的维数;
{
return len;
}
vector&vector::operator =(vector&obj)//重载=赋值到另外一个向量中去
{
if(len==obj()) //已经对()进行了重载其返回值为int型可以直接赋值
{
for(int i=0;i<obj();i++)
v[i]=obj[i];
return *this;
}
else
{
cout<<" operator= fail!"<<endl;
abort();
}
}
vector operator+(vector&obj1,vector&obj2)//重载+运算
{
int size=obj1();
if(size!=obj2()) //首先判断两个向量是不是维数相同。如果不满足就结束函数
{
cout<<"operator + fail!"<<endl;
exit(0);
}
int *t=new int (size);
for(int i=0;i<size;i++)
{
t[i]=obj1[i]+obj2[2];
}
return vector(t,size);
//vector tem(obj1());
//for(int i=0;i<obj1();i++)
//{ tem[i]=obj1[i]+obj2[i];
//return tem;
}
ostream&operator<<(ostream&output,vector&obj)//重载<<
{
for(int i=0;i<obj();i++)
cout<<obj[i]<<",";
return output;
}
istream&operator >>(istream&input,vector&obj)
{
for(int i=0;i<obj();i++)
cin>>obj[i];
return input;
}
void main()
{
int k1,k2,k3;
cout<<"input the length of vector A:"<<endl;
cin>>k1;
vector*A=new vector(k1);
cout<<"input the element of vectorA:"<<endl;
cin>>*A;
cout<<"input the length of vector B :"<<endl;
cin>>k2;
vector*B=new vector(k2);
cout<<"input the element of vector B:"<<endl;
cin>>*B;
cout<<"input the length of vector C:"<<endl;
cin>>k3;
vector*C=new vector(k3);
*C=*A+*B;
cout<<"["<<*A<<"]+["<<*B<<"]=["<<*C<<"]"<<endl;
}
[color=#FF0000]
漏掉了析构函数

并且lz的代码,重载+号的时候为什么不直接加上一个对于数字的多少点控制,还要自己输入。并且,写的挺需要提高的。都快灾难了

maying_11 2008-11-02
  • 打赏
  • 举报
回复
析构函数好象没写
maying_11 2008-11-02
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
class vector
{
public:
vector(int size=1);//默认的构造函数;
vector(int *,int );
vector( vector&); //这里写错了吧
~vector();
int &operator[](int i);
int operator()();
vector&operator=(vector&);
friend vector& operator+(vector&,vector&);
friend ostream&operator <<(ostream&,vector&);
friend istream&operator>>(istream&,vector&);
private:
int *v;
int len;
};

vector::~vector()
{
delete v;
}
vector::vector(int size)//带有默认参数的构造函数,下面的是构造函数的重载
{
if (size<=0||size>100)
{
cout<<"the size of "<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
len=size;
for(int i=0;i<size;++i)
v[i]=0;
}
vector::vector(vector&obj)
{
v=new int [obj()];
len=obj();
for(int i=0;i<obj();i++)
v[i]=obj[i];
}
vector::vector(int *b,int size)//带有参数的构造函数
{
if(size<=0||size>100)
{
cout<<" the size of"<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
for(int i=0;i<size;i++)
v[i]=b[i];
len=size;
}
int &vector::operator [] (int i)//重载[]返回向量中的一个值
{
if(i>=0&&i<100)return v[i];
cout<<"the subscript"<<i<<"is outside!"<<endl;
abort();
}
int vector::operator () ()//重载()返回向量的维数;
{
return len;
}
vector& vector::operator =(vector&obj)//重载=赋值到另外一个向量中去
{
if(len==obj()) //已经对()进行了重载其返回值为int型可以直接赋值
{
for(int i=0;i<obj();i++)
v[i]=obj[i];
return *this;
}
else
{
cout<<" operator= fail!"<<endl;
abort();
}
}
vector& operator+ (vector& obj1,vector& obj2)//重载+运算
{
int size=obj1.len;
if(size!=obj2.len) //首先判断两个向量是不是维数相同。如果不满足就结束函数
{
cout<<"operator + fail!"<<endl;
exit(0);
}
int *t=new int [size];
//int* t;
for(int i=0;i<size;i++)
{
t[i]=obj1[i]+obj2[2];

}
static vector obj3( t,size);
return obj3;



//vector tem(obj1());
//for(int i=0;i<obj1();i++)
//{ tem[i]=obj1[i]+obj2[i];
//return tem;
}
ostream&operator<<(ostream&output,vector&obj)//重载<<
{
for(int i=0;i<obj();i++)
cout<<obj[i]<<",";
return output;
}
istream&operator >>(istream&input,vector&obj)
{
for(int i=0;i<obj();i++)
cin>>obj[i];
return input;
}
int main()
{
int k1,k2,k3;
cout<<"input the length of vector A:"<<endl;
cin>>k1;
vector*A=new vector(k1);
cout<<"input the element of vectorA:"<<endl;
cin>>*A;
cout<<"input the length of vector B :"<<endl;
cin>>k2;
vector*B=new vector(k2);
cout<<"input the element of vector B:"<<endl;
cin>>*B;
cout<<"input the length of vector C:"<<endl;
cin>>k3;
vector*C=new vector(k3);
*C=*A+*B;
cout<<"["<<*A<<"]+["<<*B<<"]=["<<*C<<"]"<<endl;
return 0;
}

不知道可不可以!
arong1234 2008-11-02
  • 打赏
  • 举报
回复
你错误信息不列出难道叫人肉眼编译一遍?
[Quote=引用楼主 szqh97 的帖子:]
C/C++ code#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class vector
{
public:
vector(int size=1);//默认的构造函数;
vector(int *,int );
vector( vetor&);
~vector();
int &operator[](int i);
int operator()();
vector&operator=(vector&);
friend vector operator+(vector&,vector&);
friend ostream&operator <<(ostream&,vector&);
friend i…
[/Quote]
maying_11 2008-11-02
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
class vector
{
public:
vector(int size=1);//默认的构造函数;
vector(int *,int );
vector( vector&); //这里写错了吧
~vector();
int &operator[](int i);
int operator()();
vector&operator=(vector&);
friend vector& operator+(vector&,vector&);
friend ostream&operator <<(ostream&,vector&);
friend istream&operator>>(istream&,vector&);
private:
int *v;
int len;
};
vector::vector(int size)//带有默认参数的构造函数,下面的是构造函数的重载
{
if (size<=0||size>100)
{
cout<<"the size of "<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
len=size;
for(int i=0;i<size;++i)
v[i]=0;
}
vector::vector(vector&obj)
{
v=new int [obj()];
len=obj();
for(int i=0;i<obj();i++)
v[i]=obj[i];
}
vector::vector(int *b,int size)//带有参数的构造函数
{
if(size<=0||size>100)
{
cout<<" the size of"<<size<<"is fail"<<endl;
exit(0);
}
v=new int [size];
for(int i=0;i<size;i++)
v[i]=b[i];
len=size;
}
int &vector::operator [] (int i)//重载[]返回向量中的一个值
{
if(i>=0&&i<100)return v[i];
cout<<"the subscript"<<i<<"is outside!"<<endl;
abort();
}
int vector::operator () ()//重载()返回向量的维数;
{
return len;
}
vector& vector::operator =(vector&obj)//重载=赋值到另外一个向量中去
{
if(len==obj()) //已经对()进行了重载其返回值为int型可以直接赋值
{
for(int i=0;i<obj();i++)
v[i]=obj[i];
return *this;
}
else
{
cout<<" operator= fail!"<<endl;
abort();
}
}
vector& operator+ (vector& obj1,vector& obj2)//重载+运算
{
int size=obj1.len;
if(size!=obj2.len) //首先判断两个向量是不是维数相同。如果不满足就结束函数
{
cout<<"operator + fail!"<<endl;
exit(0);
}

for(int i=0;i<size;i++)
{
obj1[i]+=obj2[2];
}
return obj1;


//vector tem(obj1());
//for(int i=0;i<obj1();i++)
//{ tem[i]=obj1[i]+obj2[i];
//return tem;
}
ostream&operator<<(ostream&output,vector&obj)//重载<<
{
for(int i=0;i<obj();i++)
cout<<obj[i]<<",";
return output;
}
istream&operator >>(istream&input,vector&obj)
{
for(int i=0;i<obj();i++)
cin>>obj[i];
return input;
}
int main()
{
int k1,k2,k3;
cout<<"input the length of vector A:"<<endl;
cin>>k1;
vector*A=new vector(k1);
cout<<"input the element of vectorA:"<<endl;
cin>>*A;
cout<<"input the length of vector B :"<<endl;
cin>>k2;
vector*B=new vector(k2);
cout<<"input the element of vector B:"<<endl;
cin>>*B;
cout<<"input the length of vector C:"<<endl;
cin>>k3;
vector*C=new vector(k3);
*C=*A+*B;
cout<<"["<<*A<<"]+["<<*B<<"]=["<<*C<<"]"<<endl;
return 0;
}

不知道你写的什么东西!
yiduoxuehua 2008-11-02
  • 打赏
  • 举报
回复
拷贝构造函数“vector(vector&)”

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧