| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 450 人关注过本帖
标题:=的重载问题
只看楼主 加入收藏
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
结帖率:96.25%
收藏
已结贴  问题点数:20 回复次数:5 
=的重载问题
重载失败,要写成两个等于号,才赋值成功
#include <iostream.h>
class A
{
public:
    A operator =(int x)
    {
        A aa;
        aa.a=x;
        return aa;
    }
    void show()
    {
        cout<<a<<endl;
    }
private:
    int a;
};

void main()
{
A a1;
a1=3;   //这里要写a1=a1=3;才能赋值成功。怎样改可以直接a1=3 ?
a1.show();
}
搜索更多相关主题的帖子: 重载 
2009-07-26 18:07
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:20 
#include <iostream>
using namespace std;

class A
{
public:
    void operator=(int x)
    {
        a=x;
    }
    void show()
    {
        cout<<a<<endl;
    }
private:
    int a;
};

int main()
{
A a1;
a1=3;   
a1.show();

return 0;
}

我的空间:http://student./space.php?uid=116706
2009-07-26 19:05
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
谢谢了
2009-07-26 19:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 楼主 mfkblue
注意这几个语句:
A operator =(int x)
    {
        A aa;
        aa.a=x;
        return aa;
    }
没并没有把这个类自己的a赋值,而是另外生成一个对象并用x赋值,之返回了那个对象。

a1=3
这个语句把3赋值给了那个aa,返回后的值舍弃了。所以这个语句没有任何作用。


a1=a1=3
就不一样了,第一个等于还是没什么用,但返回了一个A的对象。
这后相当于:
a1=aa
这个语句调用的是拷贝构造函数,你自己没写,是编译器提供的。
它完成了对a1的赋值工作。


有一点个小提示你记一下,可能对以后的编程有用:
任何一个函数调用,我们要么期望它的返回值,要么是利用它的副作用。
除此之外的函数调用是没有意义的。

接收一个函数返回值之类的很常见,我就不说什么了。利用副作用的其实也很常见的。
比如:
printf("%c\n", 'A');
这种语句,我们就舍弃了它的返回值(虽然它有返回),但我们期望的是它的副作用(就是它在执行时产生的一些其它变化)。

你重载的那个=就没有副作用,也没接收返回值,所以那个 a1=3 的语句是没有任何意义的。
2009-07-27 00:35
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
pangding
你真是一个超级负责的版主啊。
什么时候到了深圳叫我一声,好请你搓一顿啊。
2009-07-27 22:51
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 5楼 mfkblue
呵呵,一定
2009-07-27 23:39
快速回复:=的重载问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026795 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved