一个简单的问题,运算符重载

五号智能 2008-07-13 07:40:25

#include <iostream>
using namespace std;

class point
{
private:
int val;
bool hb;
bool buf;
public:

point ():hb(0),buf(0),val(1){}
point (const point &temp){val=temp.val;hb=temp.hb;buf=temp.buf;}
point operator +(const point& temp)
{
point reval;
if (hb == temp.hb&& buf==temp.buf )
reval.val=val+temp.val;

return reval;
}

friend int &operator =(int &tmp1, point &tmp2 )
{
tmp1=tmp2.val;

return tmp1;

}

};

int main()

{

point table;
int sanheng ;
sanheng=table;

cout <<sanheng<<endl;
system("pause");
}


我想把对象中的int数据成员用赋值符号给一个int,我应该怎么重载

...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_sharp 2008-07-14
  • 打赏
  • 举报
回复
lz要解决的问题,更像是隐式类型转换,而不像是operator=的问题
mingguang7213 2008-07-14
  • 打赏
  • 举报
回复
运算符重载=左右实例必须相同,你这应该重载强制转换副
taodm 2008-07-14
  • 打赏
  • 举报
回复
楼主,C++ Primer运算符重载章节如果你认真看了的话应该知道答案。
yumei20001 2008-07-14
  • 打赏
  • 举报
回复
C++ 规定:运算符中,参数说明都是内部类型时,不能重载。像 int 是不能重载的
pengzhixi 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangxichao 的回复:]
干吗这么做呢,加个成员函数返回val的值不一样吗?
int get_val(){return val;}
[/Quote]
jy01807853 2008-07-14
  • 打赏
  • 举报
回复
楼主大哥你看
effective C++
条款里面有对你这个问题的
很好回答
jy01807853 2008-07-14
  • 打赏
  • 举报
回复
[Quote]
比如:string当中的 c_str()函数就是一个很好的证明;而不是直接获得起其类中的数据:

比如:
string mystr = "zhangjun";

char mychar[100];

mychar = mystr ;//error;

mychar = mystr.c_str(); // ok!
[/Quote]
兄弟你确定你试过这样的办法???
大哥你看下
effective C++
里面有写
确实
int get_val(){return val;}
这样很好....
zhangjundriver 2008-07-13
  • 打赏
  • 举报
回复
首先要说明的是你的那中做法通过重载operator=来实现获取类当中的整型数据是不合法的,因为这样在别人使用你的类的时候有可能编写出很晦涩的代码和难以检查的错误来。

int get_val(){return val;} 用这样的一个代码很好,能轻易地避免了错误的发生,和晦涩的代码的书写!

比如:string当中的 c_str()函数就是一个很好的证明;而不是直接获得起其类中的数据:

比如:
string mystr = "zhangjun";

char mychar[100];

mychar = mystr ;//error;

mychar = mystr.c_str(); // ok!

iwong 2008-07-13
  • 打赏
  • 举报
回复
其实为 point 类加参数为 int 类型的一个构造函数,就能实现从 int 隐式转换到 point 类型
point (int temp){val=temp;}


另外 = 一般重载为成员函数,如果非要重载为外部函数,注意第一个参数必须是 point 类型。
jianglihong 2008-07-13
  • 打赏
  • 举报
回复
这个怎么重载阿,我也想知道一下阿
K行天下 2008-07-13
  • 打赏
  • 举报
回复
重载=, 意味着是=2边都是类的实例 你强制改为类转换为int, 应该重载()强制转换符
zhangxichao 2008-07-13
  • 打赏
  • 举报
回复
干吗这么做呢,加个成员函数返回val的值不一样吗?
int get_val(){return val;}
ttkk_2007 2008-07-13
  • 打赏
  • 举报
回复

赋值运算符严格地说是一个双目运算符。 它必须是非静态成员函数。没有operator=可以说明为非成员函数。它不能被派生类继承。 如果不存在缺省的operator=函数,则编译器会为该类生成一个缺省的函数。

64,646

社区成员

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

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