运算符+重载的问题

casazaft 2005-08-22 01:09:46
我学过c#的运算符重载,现在回过头学c++,发现c#的方法好像不能用 大家看一下我的代码哪里有问题,我是为了实现两个类之间能进行加法:
#include <iostream>
using namespace std;

class Three3d
{
public:
float x;
float y;
float z;
Three3d(float a,float b,float c);
Three3d operator+(Three3d left, Three3d right)
{

return Three3d(left.x+right.x,left.y+right.y,left.z+right.z);
}
void show();
};

inline Three3d::Three3d(float a,float b,float c)
{
x=a;
y=b;
z=c;
}

void Three3d::show()
{
cout<<x;
cout<<y;
cout<<z;
}

int main()
{
Three3d t1(50,20,10);
Three3d t2(10,10,5);
Three3d t3=t1+t2;
t3.show();
}


...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
casazaft 2005-08-22
  • 打赏
  • 举报
回复
谢谢 qhfu(崩溃)兄弟 ok了
也谢谢各位兄弟 呵呵
qhfu 2005-08-22
  • 打赏
  • 举报
回复
重载加法操作符时,如果声明为class的成员函数的话,只能有一个参数,如果要有两个参数得声明为友元函数。
修改如下:
#include <iostream>
using namespace std;

class Three3d
{
public:
float x;
float y;
float z;
Three3d(float a,float b,float c);
friend Three3d operator+(Three3d left, Three3d right);

void show();
};
Three3d operator+(Three3d left, Three3d right)
{

return Three3d(left.x+right.x,left.y+right.y,left.z+right.z);
}
inline Three3d::Three3d(float a,float b,float c)
{
x=a;
y=b;
z=c;
}

void Three3d::show()
{
cout<<x<<" ";
cout<<y<<" ";
cout<<z<<" ";
}

int main()
{
Three3d t1(50,20,10);
Three3d t2(10,10,5);
Three3d t3=t1+t2;
t3.show();
system("pause");
}
caocheng8230 2005-08-22
  • 打赏
  • 举报
回复
要用引用返回,不然就有问题
Three3d& operator+(Three3d left, Three3d right)
{

return Three3d(left.x+right.x,left.y+right.y,left.z+right.z);
}
healer_kx 2005-08-22
  • 打赏
  • 举报
回复
这里不需要重载=号,它走拷贝.
NJHS 2005-08-22
  • 打赏
  • 举报
回复
Three3d t3=t1+t2;
都是对象,不是指针

是指针可以直接赋值,对象好象不可以吧
casazaft 2005-08-22
  • 打赏
  • 举报
回复
=也要重载?不会那么麻烦吧 我在devc++下就是编译不过 ....郁闷
NJHS 2005-08-22
  • 打赏
  • 举报
回复
等于也要重载吧!
healer_kx 2005-08-22
  • 打赏
  • 举报
回复
可行的,C#的我倒是不知道.但是你的参数改为传递引用比较好.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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