1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * 通过 this 返回对象的引用或者指针
    5. * */
    6. class TDate {
    7. private:
    8. int yy, mm, dd;
    9. public:
    10. TDate(int =2006, int =1, int =1);
    11. TDate& setYear(int);
    12. TDate& setMonth(int);
    13. TDate* setDay(int);
    14. TDate setDate(int ,int, int);
    15. void display();
    16. };
    17. TDate::TDate(int y, int m, int d) {
    18. yy = y;
    19. mm = m;
    20. dd = d;
    21. }
    22. TDate& TDate::setYear(int year) {
    23. yy = year;
    24. return *this;
    25. }
    26. TDate& TDate::setMonth(int month) {
    27. mm = month;
    28. return *this;
    29. }
    30. TDate* TDate::setDay(int day) {
    31. dd = day;
    32. return this;
    33. }
    34. TDate TDate::setDate(int y, int m, int d) {
    35. yy = y;
    36. mm = m;
    37. dd = d;
    38. return *this;
    39. }
    40. void TDate::display() {
    41. printf("address 0x%04x yy=%04d mm=%02d dd=%02d\n", this, yy, mm, dd);
    42. }
    43. int main() {
    44. TDate d1, d2;
    45. // 调用默认构造函数
    46. cout<<"d1 "; d1.display();
    47. cout<<"d2 "; d2.display();
    48. // 返回引用,可以继续调用函数修改成员
    49. d1.setYear(2007).setMonth(3).setDay(30);
    50. cout<<"d1 "; d1.display();
    51. // setDate 返回普通对象,不是d1本身,而是临时对象,既不是指针也不是引用,因此无法设置后续的天数
    52. d1.setDate(2000, 1, 10).setDay(30);
    53. cout<<"d1 "; d1.display();
    54. TDate *p;
    55. p = d1.setDay(21); // 返回 d1对象的指针
    56. cout<<"d1 "; p->display();
    57. TDate d3 = d2.setYear(2006).setMonth(4);
    58. cout<<"d3 "; d3.display();
    59. d1.setYear(2007).setMonth(3) = d3; // 赋值语句
    60. cout<<"d1 "; d1.display();
    61. return 0;
    62. }