C++对象赋值

来源:百度知道 编辑:UC知道 时间:2024/05/26 10:06:26
定义一个Cat类
Cat i;
Cat a=i;
i已经赋值,如果,Cat拥有两个私有变量和拥有一个私有变量有什么区别?自定义类的赋值就是把i的私有对象的所有的值都赋给a么?

(1)相对一个私有变量而言,拥有两个私有变量,就等于多封装了一个变量。等于每个cat类的对象都可以多使用一个变量。
(2)Cat a=i; 是将i进行移位复制(完全复制)到a 。
自定义类的赋值就是把i的私有对象(其实还包括其他的成员)的所有的值都赋给a。你的理解是完全正确。

突然想起来,还存在一种特例,当一个对象被另一个对象显式的初始化是——就是你的这种情况。
如果有复制构造函数,那么就必须按照复制构造函数来构造函数

我记不大请了,如果没有定义拷贝构造函数的话,赋值用的是按位原封不动的拷贝,如果定义了拷贝构造函数,那就按函数体的语句进行拷贝

简单的说,如果Cat类的变量是第一类值,与变量个数是无关的,也就是你说的:自定义类的赋值就是把i的私有对象的所有的值都赋给a。
但是,如果类的变量是指针,那么,在Cat a=i;执行的时候,只会将i的变量的指针值赋给a的变量,这也就是常说的浅拷贝。

a只是i的一个拷贝。