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=()
创建对象同时将非当前类对象的参数传进来,就调用普通构造
创建对象同时将当前类对象传参进来,就是调用的拷贝构造
先创建对象(调用普通构造或者拷贝,看你当时有没有初始化),然后再给他赋值(非第一次初始赋值了)就调用赋值运算符。
浙公网安备 33010602011771号