在线求助!!!!!!!!!!

tonychoppe 2008-05-11 12:32:53
#include <iostream.h>
class vector
{
private:
int a[3];
public:
vector & operator =(vector &);
vector(int,int,int);
friend vector & operator +(vector &,vector &);
friend ostream & operator <<(ostream &,vector &);
};

vector::vector(int a,int b,int c):a[0](a),a[1](b),a[3](c){}

vector & vector::operator =(vector & s1)
{
vector s2(0,0,0);
for(int i=0;i<3;i++)
s2.[i]=s1.[i];
return s2;
}

vector & operator +(vector & x,vector & y)
{
vector s(0,0,0);
for(int i=0;i<3;i++)
s.a[i]=x.a[i]+y.a[i];
return s;
}

ostream & operator <<(ostream & output,vector & s)
{

cout<<s.a<<" "<<s.b<<" "<<s.c<<" "<<endl;
return output;
}

void main()
{
vector a(7,8,9),b(6,8,10),c(0,0,0);
cout<<a;
cout<<b;
c=a+b;
cout<<c;
}




总是报错,将类定义的数组改成三个独力数就可运行,为什么???
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jncryang 2008-05-11
  • 打赏
  • 举报
回复


#include <iostream>
//#include <Vector>
using namespace std;
class Vector
{

public:
Vector & operator =(Vector &);
Vector(int,int,int);
friend Vector operator +(Vector &,Vector &);
friend ostream & operator <<(ostream &,Vector &);
private:
int a[3];
};
Vector::Vector(int a,int b,int c)
{
this->a[0] = a;
this->a[1] = b;
this->a[2] = c;
}

Vector & Vector::operator =(Vector & s1)
{
//Vector s2(0,0,0);
this->a[0]=s1.a[0];
this->a[1]=s1.a[1];
this->a[2]=s1.a[2];
return *this;
}

Vector operator +(Vector & x,Vector & y)
{
Vector s(0,0,0);
for(int i=0;i <3;i++)
s.a[i]=x.a[i]+y.a[i];
return s;
}

ostream & operator <<(ostream & output,Vector & s)
{

cout <<s.a[0] <<" " <<s.a[1] <<" " <<s.a[2] <<" " <<endl;
return output;
}

void main()
{
Vector a(7,8,9),b(6,8,10),c(0,0,0);
cout <<a;
cout <<b;
c=a+b;
cout <<c;
}
晨星 2008-05-11
  • 打赏
  • 举报
回复
刚才脑子有点晕,有几处注释加错了,更正一下:
// 不要再使用老式的头文件了
//#include <iostream.h>
#include <iostream>
using namespace std;

class vector
{
private:
int a[3];
public:
vector & operator =(vector &);
vector(int,int,int);

// 用非成员函数实现的operator+不要返回引用,因为你将返回局部对象。
//friend vector & operator +(vector &,vector &);
friend vector operator +(vector &,vector &);

friend ostream & operator <<(ostream &,vector &);
};

// 数组成员不可以这么初始化,还是写在构造函数中吧。
// vector::vector(int a,int b,int c):a[0](a),a[1](b),a[3](c){}
vector::vector(int a,int b,int c) {
// 这里需要使用this引用成员,是因为你的成员变量跟一个参数重名了。
this->a[0] = a;
this->a[1] = b;
this->a[2] = c;
}

/*
vector & vector::operator =(vector & s1)
{
vector s2(0,0,0);
for(int i=0;i <3;i++)
// 没有“.[i]”这么种用法。
// s2.[i]=s1.[i];
s2.a[i] = s1.a[i];
return s2;
}
*/

// 上面那个operator=只是帮你改成了可以通过编译
// 但operator=不可以这么实现的,这样对调用operator=的左值对象没有一点影响;
// 更严重的,还返回了局部自动变量的引用。
// 正确一点的实现方式是:
vector & vector::operator =(vector & s1)
{
for(int i=0;i <3;i++)
this->a[i] = s1.a[i];
return *this;
}

// 用全局函数实现的operator+不要返回引用,因为你返回的是局部对象
//vector & operator +(vector & x,vector & y)
vector operator +(vector & x,vector & y)
{
vector s(0,0,0);
for(int i=0;i <3;i++)
s.a[i]=x.a[i]+y.a[i];
return s;
}

ostream & operator <<(ostream & output,vector & s)
{
//cout << s.a << " " << s.b << " " << s.c << " " << endl;
cout << s.a[0] << " " << s.a[1] << " " << s.a[2] << " " << endl;
return output;
}

void main()
{
vector a(7,8,9),b(6,8,10),c(0,0,0);
cout << a;
cout << b;
c = a+b;
cout << c;
}
晨星 2008-05-11
  • 打赏
  • 举报
回复
// 不要再使用老式的语法了
//#include <iostream.h>
#include <iostream>
using namespace std;

class vector
{
private:
int a[3];
public:
vector & operator =(vector &);
vector(int,int,int);

// 用非成员函数实现的operator+不要返回引用,因为你将返回局部对象。
//friend vector & operator +(vector &,vector &);
friend vector operator +(vector &,vector &);

friend ostream & operator <<(ostream &,vector &);
};

// vector::vector(int a,int b,int c):a[0](a),a[1](b),a[3](c){}
// 数组成员不可以这么初始化,还是写在构造函数中吧。
vector::vector(int a,int b,int c) {
// 这里需要使用this引用成员,是因为你的成员变量跟一个参数重名了。
this->a[0] = a;
this->a[1] = b;
this->a[2] = c;
}

/*
vector & vector::operator =(vector & s1)
{
vector s2(0,0,0);
for(int i=0;i <3;i++)
// 你原先的vector类并没有重载operator[],怎么能这样用。

// 没有“.[i]”这么种用法。
// s2.[i]=s1.[i];
s2.a[i] = s1.a[i];
return s2;
}
*/

// 上面那个operator=只是帮你改成了可以通过编译
// 但operator=不可以这么实现的,你这样调用operator=的左值对象没有一点影响;
// 更严重的,还返回了局部自动变量的引用。
// 正确一点的实现方式是:
vector & vector::operator =(vector & s1)
{
for(int i=0;i <3;i++)
this->a[i] = s1.a[i];
return *this;
}

// 用全局函数实现的operator+不要返回引用,因为你返回的是局部对象
//vector & operator +(vector & x,vector & y)
vector operator +(vector & x,vector & y)
{
vector s(0,0,0);
for(int i=0;i <3;i++)
s.a[i]=x.a[i]+y.a[i];
return s;
}

ostream & operator <<(ostream & output,vector & s)
{
//cout << s.a << " " << s.b << " " << s.c << " " << endl;
cout << s.a[0] << " " << s.a[1] << " " << s.a[2] << " " << endl;
return output;
}

void main()
{
vector a(7,8,9),b(6,8,10),c(0,0,0);
cout << a;
cout << b;
c = a+b;
cout << c;
}

33,311

社区成员

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

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