33,311
社区成员
发帖
与我相关
我的任务
分享
#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;
}
// 不要再使用老式的头文件了
//#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;
}
// 不要再使用老式的语法了
//#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;
}