小弟有一段程序看不明白是关于运算符重载、指针和引用的程序段

suxiaoguai 2002-07-17 09:32:38
小弟有一段程序看不明白是关于运算符重载的程序段如下:

class Counter
{
public:
Counter();
~Counter(){}
int GetItsVal() const {return itsVal;}
void SetItsval(int x) {itsval=x;}
void Increment() {++itsVal;}
//------看不懂的地方
const Counter& operator++ ();
//------看不懂的地方
private:
int itsVal;
};

Counter::Counter():
itsVal(0)
{};
//-------看不懂的地方
const Counter& Counter::operator ++ ()
{
++ itsVal;
return * this;
}
//-------看不懂的地方
在那个运算符重载成员函数里返回的是一个 Counter的引用 可是 * this 应该是一个值来的啊 我觉得返回 this 才对吧???
...全文
39 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwanter 2002-07-17
  • 打赏
  • 举报
回复
Counter Counter::operator ++ ()
新建一个对象。楼上说得很详细。
cccc2002 2002-07-17
  • 打赏
  • 举报
回复
引用是你所引用的对象的别名,这里的返回值类型是const Counter& ,也就是说返回的是一个const Counter对象的引用, 之所以要如此定义返回类型,是不允许对此返回值进行修改, const出现的目的是存取权限保护,也就是:不随便把对this所指对象的存取权限赋予调用者, &出现则是效率考虑,返回&不需要调用Counter的构造函数,而直接如返回一个Counter对象(将返回值类型定义为Counter), 虽然语法正确, 但必定会调用Counter的构造函数, 这和函数参数在传值还是传引用时的效率差异同理,你可以自己跟踪一下构造析构函数实验一下.
天外飞狐 2002-07-17
  • 打赏
  • 举报
回复
不对,对于'++'运算符,由于它没有串行赋值得问题,应该用Counter const &,这是一个好的规则。而象+,她就不同,如果想知道详细的情况,查书即可。

因为我们要引用的是this所指向的对象,而不是this指针,所以返回的是*this.
Oversense 2002-07-17
  • 打赏
  • 举报
回复
Counter operator ++ ();
函数定义:
Counter Counter::operator ++ ()
{
++ itsVal;
return *this;
}
就是这样就可以了
suxiaoguai 2002-07-17
  • 打赏
  • 举报
回复
cwanter(LDT to GDT) :

那如果这样呢?
函数声明:
Counter operator ++ ();
函数定义:
Counter Counter::operator ++ ()
{
++ itsVal;
return Counter(itsVal);
}
这样才是返回一个对象吧
有点晕 如果象你说的 返回引用就是返回对象 那么 要返回对象是用this指针该是怎么样的呢?
个返回引用一样吗?
cwanter 2002-07-17
  • 打赏
  • 举报
回复
this是个指针,所以要用*this返回对象。返回引用就是返回对象。
wangran 2002-07-17
  • 打赏
  • 举报
回复
同意你的看法,应为return this;
bluedodo 2002-07-17
  • 打赏
  • 举报
回复
引用总是绑定在一个对象上的,返回引用是为了不必要的空间和时间开销.其实在理论上都能达到目的.
cccc2002 2002-07-17
  • 打赏
  • 举报
回复
当然是这样, 再说一遍, 所谓“引用”就是其所引用的对象的别名,其性质对编译器在对两者的实现上才有差异,对普通用户则是同样的,所以应该说在任何可以应用此对象的地方都可以应用其引用, 对返回值当然也是一样, 但要注意,这两者的使用效果可能不同,函数参数在传值和传引用上的差别就最明显了,但不管你定义比如说:
void TestFunc1(int);
还是
void TestFunc2(int &);

对int i;
都是可以这样运用的:
TestFunc1(i);
TestFunc2(i);


返回值没什么特殊,当然是一样的道理。

suxiaoguai 2002-07-17
  • 打赏
  • 举报
回复
我在这里是想弄明白 为什么 这是我搞不明白的

为什么:
返回一个Counter对象是也是 return * this;
返回一个Counter引用是也是 return * this;

而我知道 如果返回一个对象的话效率不如返回一个引用

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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