C++ 级联成员函数调用

mediam2000 2009-03-23 09:31:21
// fig21_20.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;

class Time
{
public:
// 构造函数
Time(int h = 0, int m = 0, int s = 0)
{
hour = h;
minute = m;
second = s;
}
Time& setHour(int h) // 成员函数返回*this , 返回类型为什么不可直接用Time,而是Time & 来支持级联成员?
{
hour = h;
return *this;
}

Time& setMinute(int m)
{
minute = m;
return *this;
}

Time& setSecond(int s)
{
second = s;
return *this;
}

void displayTime()
{
cout << hour << ":" << minute << ":" << second;
}
private:
int hour;
int minute;
int second;
};



int _tmain(int argc, _TCHAR* argv[])
{
Time t;

t.setHour( 10 ).setMinute( 20 ).setSecond( 55 ); // 级联成员函数调用

t.displayTime();

getchar();
return 0;
}
...全文
234 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mediam2000 的回复:]
明白了:值返回回产生临时变量,引用返回不会,直接返回对该值的引用
[/Quote]
正解。
mediam2000 2009-03-23
  • 打赏
  • 举报
回复
明白了:值返回回产生临时变量,引用返回不会,直接返回对该值的引用
pengzhixi 2009-03-23
  • 打赏
  • 举报
回复
然后你这里有多个set函数,如果有a.setHour(int h).setMin(int m)这样的操作的话,返回Time是不可能这么操作的
pengzhixi 2009-03-23
  • 打赏
  • 举报
回复
Time& setHour(int h) // 成员函数返回*this , 因为你是要对*this 对象进行操作。如果返回Time 就会返回一个临时变量。
mediam2000 2009-03-23
  • 打赏
  • 举报
回复
笔误:

实际输出是:
当返回类型是Time & 时,输出结果是 0:0:0
10:20:55
当返回类型是Time 时,输出结果是 0:0:0
90:00:00
为什么?



mediam2000 2009-03-23
  • 打赏
  • 举报
回复
有问题:

当返回类型是Time & 时,打印结果是 10:20:55
但是用Time作返回类型时,打印结果是 10:0:0

郁闷
eatsweetpotato 2009-03-23
  • 打赏
  • 举报
回复
no问题呀
mediam2000 2009-03-23
  • 打赏
  • 举报
回复
不是吧?This 是指向指向object的指针,*This 我就认为是返回object了
另外 Time & 这是object的别名呀。

照你的理解This是指针的指针了。我试试

先谢谢了。
zqz981 2009-03-23
  • 打赏
  • 举报
回复
Time& setHour(int h) // 成员函数返回*this , 返回类型为什么不可直接用Time,而是Time & 来支持级联成员?

返回类型是 *this?因为this 本身是个指针类型啊,*this 代表的是time object 的地址啊。
所以 用 Time&。

64,663

社区成员

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

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