| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1486 人关注过本帖
标题:this指针作为临时对象的困惑
只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
追问一个额外问题:对于临时对象,应该在哪些情况下使用到临时对象?
除了“当函数返回一个对象时,要创建一个临时对象来存放返回的对象”这种情况,还有其他什么情况??
1,当函数返回一个对象时,要创建一个临时对象来存放返回的对象(例子)
Student fn()
{
   //.....
Studnet ms("virgil")
reutnr ms;
}
int main()
{
  Student s;
  s=fn();
  return 0;
}
求版主给我列举一下其他情况下的使用临时对象的用法,如果有临时对象的概念以及例子,我就好理解了

思考赐予新生,时间在于定义
2013-06-07 23:28
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
不明白什么叫临时对象的用法...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-08 08:52
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 22楼 peach5460
呃呃呃,就是怎么使用临时对象,什么情况下要用到临时对象

思考赐予新生,时间在于定义
2013-06-08 11:19
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
函数里面不使用临时变量如何实现行为?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-08 12:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在需要的时候用上面定义的构造函数Date(year, month, day)创建一个对象即可,它是自动变量,作用期外自动消失(该类代码自己处理内存释放),这种就是临时对象,与普通变量是同样的道理(变量就是对象,C++视所处理的东西为对象,是很广泛的概念)。

授人以渔,不授人以鱼。
2013-06-08 14:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <iostream>
#include <conio.h>

class Date
{
private:

    int year;
    int month;
    int day;

public:

    Date(int y = 0, int m = 0, int d = 0) : month(m), day(d), year(y) {}
    Date operator -(int days);
    void display(void);
};

void Date::display(void)
{
    std::cout << year << "-" << month << "-" << day << std::endl;
}

Date Date::operator-(int days)
{
    Date d(this->year, this->month, this->day);     // 创建临时对象
    // 以下日期算法只作示范,具体实现你自己写
    d.day -= days;
    if (d.day < 0)
    {
        d.day += 30;
        --d.month;
    }
    return d;
}

void main(void)
{
    Date dt(2008, 12, 18);
    dt.display();
    Date d(dt - 20);
    d.display();
    _getch();
}

授人以渔,不授人以鱼。
2013-06-08 22:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
之所以把算符重载改为减,是因为没必要在自减中创建临时对象,那直接使用内部的year、month、day运算即可。

授人以渔,不授人以鱼。
2013-06-08 22:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
后缀自减的实现,必须与要求相符:在方法内部,先创建临时对象,然后使用自身的数据做减法运算(后缀自加也一样),修改数据本身,但方法返回的是临时对象,即修改前的数据。前缀自加自减才不用临时对象,所以前缀运算和后缀运算,效率是有细微差别的。

授人以渔,不授人以鱼。
2013-06-09 13:11
快速回复:this指针作为临时对象的困惑
数据加载中...
 
   



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

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