// ============================================================================ // p1c04_04_02 — 4.4.2.2 this指针的使用 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; #include static inline void pause() { printf("按回车键继续..."); (void)getchar(); } // --- 原文片段 [58954456:1] 4.4.2.2 this指针的使用 --- class Person{ public: //1. 当形参名和成员变量名一样时,this指针可用来区分 Person(string name,int age){ //name = name; //age = age; //输出错误 this->name = name; this->age = age; } //2. 返回对象本身的引用 //重载赋值操作符 //其实也是两个参数,其中隐藏了一个this指针 Person PersonPlusPerson(Person& person){ string newname = this->name + person.name; int newage = this->age + person.age; Person newperson(newname, newage); return newperson; } void ShowPerson(){ cout << "Name:" << name << " Age:" << age << endl; } public: string name; int age; }; //3. 成员函数和全局函数(Perosn对象相加) Person PersonPlusPerson(Person& p1,Person& p2){ string newname = p1.name + p2.name; int newage = p1.age + p2.age; Person newperson(newname,newage); return newperson; } int main(){ Person person("John",100); person.ShowPerson(); cout << "---------" << endl; Person person1("John",20); Person person2("001", 10); //1.全局函数实现两个对象相加 Person person3 = PersonPlusPerson(person1, person2); person1.ShowPerson(); person2.ShowPerson(); person3.ShowPerson(); //2. 成员函数实现两个对象相加 Person person4 = person1.PersonPlusPerson(person2); person4.ShowPerson(); pause(); return EXIT_SUCCESS; } // --- main ---