#include<bits/stdc++.h>using namespace std;/** * 通过 this 返回对象的引用或者指针 * */class TDate { private: int yy, mm, dd; public: TDate(int =2006, int =1, int =1); TDate& setYear(int); TDate& setMonth(int); TDate* setDay(int); TDate setDate(int ,int, int); void display();};TDate::TDate(int y, int m, int d) { yy = y; mm = m; dd = d;}TDate& TDate::setYear(int year) { yy = year; return *this;}TDate& TDate::setMonth(int month) { mm = month; return *this;}TDate* TDate::setDay(int day) { dd = day; return this;}TDate TDate::setDate(int y, int m, int d) { yy = y; mm = m; dd = d; return *this;}void TDate::display() { printf("address 0x%04x yy=%04d mm=%02d dd=%02d\n", this, yy, mm, dd);}int main() { TDate d1, d2; // 调用默认构造函数 cout<<"d1 "; d1.display(); cout<<"d2 "; d2.display(); // 返回引用,可以继续调用函数修改成员 d1.setYear(2007).setMonth(3).setDay(30); cout<<"d1 "; d1.display(); // setDate 返回普通对象,不是d1本身,而是临时对象,既不是指针也不是引用,因此无法设置后续的天数 d1.setDate(2000, 1, 10).setDay(30); cout<<"d1 "; d1.display(); TDate *p; p = d1.setDay(21); // 返回 d1对象的指针 cout<<"d1 "; p->display(); TDate d3 = d2.setYear(2006).setMonth(4); cout<<"d3 "; d3.display(); d1.setYear(2007).setMonth(3) = d3; // 赋值语句 cout<<"d1 "; d1.display(); return 0;}