C/C++编程:自引用

1059 篇文章 286 订阅
class Date{
    int y, m, d;
public:
    void add_year(int n);
    void add_month(int n);
    void add_day(int n);
};

对于状态更新函数add_year()、add_month()、add_year()是没有返回值的,对这样一组的相关更新函数,一种很有用的技术是返回已更新对象的引用,这样这些操作就可以串联起来,比如:

void f(Date & d){
	d.add_year(1).add_month(1).add_year(1);
}

为此,必须将每个函数都声明为返回一个Date引用:

class Date{
    int y, m, d;
public:
    Date& add_year(int n);
    Date& add_month(int n);
    Date& add_day(int n);
};



每个(非static)成员函数都知道是哪个对象调用的它,并能显式引用这个对象。比如:

Date& Date::add_year(int n){
     // ....
    y += n;
    return *this;
}

this的使用大多数是隐式的。特别是,每当我们引用类内的一个非static成员时,都是依赖于一次this隐式使用来获得恰当对象的该成员。比如:

Date& Date::add_year(int n){
     // ....
    this->y += n;
    return *this;
}

this的一种场景的显式应用时用于链表操作,比如:

struct Link{
	Link * pre;
	Link * suc;
	int    daya;

	Link * insert(){  //在this之前插入x
		return pre = new Link{pre, this, x};
	}
	void remove(){  
		if(pre){
			pre->suc = suc;
		}
		if(suc){
			suc->pre = pre;
		}
		delete this;
	}
	...
};

从一个派生类模板访问基类的成员也需要显式使用this

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值