免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11312 | 回复: 4
打印 上一主题 下一主题

[C++] return *this与return this的区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 17:15 |只看该作者 |倒序浏览
真不好意思,先前一个程序我弄错了
不过又有一个简单的问题想请教大家.....
如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数。这句话正确吗?如果正确为什么会生成一个拷贝构造函数呢?

#include<iostream>//重载运算符+=的程序分析
using namespace std;
class Amount{
      int amount;
      public:
             Amount(int n=0):amount(n){};
             int getAmount()const {return amount;}
             Amount &operator+=(Amount a){amount+=a.amount; return *this;}//为什么要有(Amount a)呢?这是必须要有的,否则就无法编译
             };//return this和return *this 有什么不同啊?,这里return this也无法编译,所以我不明白两者的区别
      int main()
             {
                 Amount x(3),y(7);
                 x+=y;
                 cout<<x.getAmount()<<endl;
                 return 0;
             }

[ 本帖最后由 中国可爱小牛 于 2009-7-2 22:44 编辑 ]

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2009-07-02 17:34 |只看该作者
1)利用C++虚函数实现了多态

2)return *this与return this的区别

前面是对象本身
后者是指向对象本身的指针

Amount部分VC6下编译通过了!

[ 本帖最后由 cheng_lai_shun 于 2009-7-2 17:47 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-07-02 18:18 |只看该作者
B *p=new D;是为了省去你初始化一些值

论坛徽章:
0
4 [报告]
发表于 2009-07-02 18:40 |只看该作者

回复 #2 cheng_lai_shun 的帖子

我知道它是实现了多态,但它如何实现了多态?正如我疑惑的“既然声明了虚基类,后两个函数中传入的是派生类的对象,为什么反倒执行基类的函数而不是像fun1一样执行派生类的函数呢?”可以赐教些详细的解答吗?

论坛徽章:
0
5 [报告]
发表于 2009-07-02 18:46 |只看该作者

回复 #3 aaaaa5aa 的帖子

我确实是不明白,为什么说是“为了省去你初始化一些值”呢?(如果我明白那我肯定不问这个问题了)由B *p=new D;那么D*p=new B又是怎样的情况?和前面的一样?还有希望朋友可以回答“为什么要有(Amount a)呢?”这个问题。嗯,还是谢谢你们,这在课上是听不到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP