C++面向对象进阶

C++中的拷贝是啥意思?

是利用一个已经存在的对象创建一个新对象,用已经存在的数据初始化新对象的内存。

对象创建有两个阶段:1.分配内存 2.进行初始化      是不是new关键字的使用

stu s1(s2), stu  s1 = s2, stu  s1 = 1, 类似这种都是以拷贝的方式完成的初始化,区别只是有没有进行隐式的类型转换,比如从const char* -> string

初始化和赋值是有差别的,从上面这个例子就能感受出来,我总是在定义它的那行代码同时进行赋值,这个赋值是对这个对象的内存首次进行的,定义加第一次赋值 一次完成 就是初始化,它调用的是拷贝构造函数。

 

感受一下调用普通构造函数(有参情况,没参当然能区分),拷贝构造函数,赋值运算符的差别

//stu1、stu2、stu3都会调用普通构造函数Student(string name, int age, float score)
    Student stu1("小明", 16, 90.5);
    Student stu2("王城", 17, 89.0);
    Student stu3("陈晗", 18, 98.0);
    
     Student stu4 = stu1;  //调用拷贝构造函数Student(const Student &stu)
    stu4 = stu2;  //调用operator=()
    stu4 = stu3;  //调用operator=()
   
    Student stu5;  //调用普通构造函数Student()
  Student stu3(stu1); //调用拷贝构造函数
stu5 = stu1; //调用operator=() stu5 = stu2; //调用operator=()

创建对象同时将非当前类对象的参数传进来,就调用普通构造

创建对象同时将当前类对象传参进来,就是调用的拷贝构造

先创建对象(调用普通构造或者拷贝,看你当时有没有初始化),然后再给他赋值(非第一次初始赋值了)就调用赋值运算符。

 

posted @ 2023-08-28 16:28  timeMachine331  阅读(11)  评论(0)    收藏  举报