cpp
#include<iostream>
#include<ctime>
using namespace std;
class Person
{
public:
//Person()
//{
// cout << "构造函数调用"<<endl;
//}
Person(int age)
{
this->age = age;
cout << "有参构造函数调用" << endl;
}
Person(const Person& p1)
{
this->age = p1.age;
cout << "拷贝构造函数调用" << endl;
}
~Person() {
cout << "析构函数被调用" << endl;
}
int age;
//f
Person addAge(const Person &p) //使用引用传递类对象 节省空间
{
this->age += p.age;
return *this;//返回正在操作的对象 为链式编程提供条件
}
};
Person test01()
{
Person p1(18);
Person p2 = p1;
//p2.addAge(p1);
p2.addAge(p1).addAge(p1);
cout << p2.age << endl;
return p2;
}
int main()
{
test01();
return 0;
}
其中
cpp
Person addAge(const Person &p) //使用引用传递类对象 节省空间
{
this->age += p.age;
return *this;//返回正在操作的对象 为链式编程提供条件
}
cpp
Person& addAge(const Person &p) //使用引用传递类对象 节省空间
{
this->age += p.age;
return *this;//返回正在操作的对象 为链式编程提供条件
}
第一个函数返回一个新的Person对象,它的年龄是原Person对象的年龄加上传入Person对象的年龄,但是返回的是值类型,每次调用都会创建一个新的对象,比较浪费空间。
第二个函数返回一个对正在操作的Person对象的引用,它的年龄是原Person对象的年龄加上传入Person对象的年龄,这样可以避免创建新的对象,节省空间。此外,它还可以用于链式编程,即一个函数返回一个对象的引用,这个对象又可以调用另一个函数,依次进行链式操作。
结果:第一种方式输出36,第二种方式输出54.