1.说明
1.使用一个已经实例化的对象来初始化一个新的对象。
2.值传递的方式给函数参数传值。
3.以值方式返回局部对象。
2.代码实现如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Person {
public:
Person() {
cout << "默认构造函数" << endl;
}
Person(int age) {
cout << "传参构造函数" << endl;
this->age = age;
}
Person(const Person& p1) {
cout << "拷贝构造函数" << endl;
this->age = p1.age;
}
~Person() {
cout << "析构函数" << endl;
}
int age;
};
void func(Person p) {
}
Person func2() {
Person p1;
cout << &p1 << endl;
return p1;
}
int main() {
Person p(10);
//Person p2(p1);//调用拷贝构造
//func(p1);//再次调用拷贝构造,值传递的原理就是创造一个新的副本传入函数
Person p2=func2();
cout << &p2 << endl;
/*编译器好像自动优化了,这里并没有调用拷贝构造函数,而且func2中的p1与p2
的两次输出地址是一样的,第三点有待考察*/
}