首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 运算符重载问题!请教 [已结贴,结贴人:alexmars19831026]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alexmars19831026
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-23 20:12:26 楼主
    #include <iostream>
    using namespace std;
    class Complex
    {
    public:
    Complex(){real=0;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    Complex operator+(Complex &c2);
    void display();
    private:
    double real;
    double imag;
    };
    Complex Complex::operator+(Complex &c2)
    {
    Complex c;
    c.real=real+c2.real;
    c.imag=imag+c2.imag;
    return c;
    }
    void Complex::display()
    {
    cout < <"(" < <real < <"," < <imag < <"i)" < <endl;
    }
    int main()
    {
    Complex c1(3,4),c2(5,-10),c3;
    c3=c1+c2;//=号运算符为什么不需要重载就能够达到目的
    cout < <"c1=";
    c1.display();
    cout < <"c2=";
    c2.display();
    cout < <"c1+c2=";
    c3.display();
    return 0;
    }
    =号运算符为什么不需要重载就能够达到赋值目的,没有想明白,望指教
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 6

    发表于:2008-08-23 20:13:501楼 得分:3
    如果没有写operator=那么编译器就会自动生成一个.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Vegertar
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:18:582楼 得分:5
    c1 + c2得到与左值同类型的临时对象.
    赋值时编译器生成默认copy构造函数实现最简单的成员复制.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vecri
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:23:133楼 得分:3
    如果不写operator=, 编译器会默认生成一个operator=, 实行浅拷贝
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhongyunde
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:25:474楼 得分:2
    编译器会默认生成一个operator= 什么形式呢  ??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kong_ling
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:28:595楼 得分:3
    引用 1 楼 akirya 的回复:
    如果没有写operator=那么编译器就会自动生成一个.

    引用 3 楼 vecri 的回复:
    如果不写operator=, 编译器会默认生成一个operator=, 实行浅拷贝


    呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kong_ling
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:35:086楼 得分:2
    缺省的按成员赋值
    应该是这种形式的吧:
    C/C++ code
    inline Complex& Complex::operator = (const Complex &rhs) { real = rhs.real; image = rhs.image; }

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Vegertar
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:39:367楼 得分:2
    嗯,我觉得我的观点还是蛮有道理的.貌似没有人支持.
    就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的.当一个类没有自定义的拷贝构造函数的
    时候系统会自动提供一个默认的拷贝构造函数,来完成复制工作。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kong_ling
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 20:49:258楼 得分:0
    不是调用拷贝构造函数,是拷贝赋值函数。因为已经构造过了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wjb_yd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 21:04:039楼 得分:0
    引用 1 楼 akirya 的回复:
    如果没有写operator=那么编译器就会自动生成一个.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alexmars19831026
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 21:06:1010楼 得分:0
    谢谢大家,明白了,做了实验,散分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cyblueboy83
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 22:21:5411楼 得分:0
    浅拷贝
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved