c++入门篇七

时间:2023-03-09 09:28:44
c++入门篇七

拷贝构造函数的调用时机:

class  Person {
public:
//构造函数
Person() {
//无参构造函数
}
Person(int a) {
//有参构造函数
cout << "有参构造函数" << endl;
}
Person(const Person &p) {
//拷贝构造函数,前面必须加const,拷贝过来的不能再修改了,固定的,就是说你拷贝过来了张三,不能再修改成张四(p.name=""),只能是原版张三
//传过来的&p是对象,p就是指针
age = p.age;//age被赋值
cout << "拷贝构造函数" << endl;
}
~Person()
{
cout << "析构函数" << endl;
}
int age;
};

第一种:使用已经创建好的对象来初始化新的对象

void  test01() {
//拷贝构造函数的几种方式
//第一种方式:直接赋值拷贝对象
Person p1;
p1.age = ;//已经创建好了对象
Person p2 = p1;//相当于拷贝了p1给p2
fun(p2);

第二种方式:值传递的方式拷贝

//第二种方式:值传递的方式拷贝
void fun(Person &p1) {//相当于Person p=Person(p2),拷贝构造函数,建议使用引用,节省一份新的开销,不用新的内存空间
cout << "fun函数:" << p1.age << endl; }
void  test01() {
Person p1;
p1.age = ;//已经创建好了对象
Person p2 = p1;//相当于拷贝了p1给p2
fun(p2);//传递p2给fun函数

第三种方式:以值方式返回局部对象

//第三种:以值方式返回局部对象int xxx(){},Person  xxx(){},结构体或者是函数的话,都可以不去加()
Person fun1() {
Person p;
p.age = ;
return p;
}
    //第三种方式:
Person p3 = fun1();

release模式下会做优化,debug模式下没有做优化

release模式下结果:第三种方式的

c++入门篇七