c++---对象的赋值和复制


一对象的赋值

一个类中定义了多个对象,则这些对象之间可以相互赋值,对象赋值的格式: 对象名1 = 对象名2
对象赋值的例子
Student std1(90,80,75),dtd2;
....
....
std2 = std1;
说明:
(1)对象的赋值只是对数据成员赋值,而不是对成员函数赋值。数据成员是占内存空间的,不同对象的数据成员占不同的存储空间,赋值的过程是将一个对象的数据成员在存储空间的状态赋值给另一个对象数据成员的成员函数。不同对象的成员函数是同一个代码段,不需要也无法对它们赋值。
(2)类的数据成员中不能包含动态分配的数据,否则在赋值的过程中出现严重的后果。

二.对象的复制

有时候需要多个完全相同的对象,用一个已有的对象快速的复制出另一个对象例如: Box box2(box1); //已有的对象克隆出另一个对象。
复制对象的形式:类名 对象1(对象2); //对象2复制出对象1
在建立新的对象的时候,调用特殊的构造函数,复制构造函数
Box::Box(const Box& b)
{
height = b.height;
width = b.width;
length = b.length;
}
C++还提供一种复制的方式,例如:Box box2 = box1;
一般形式:类名 对象1 = 对象2;
可以在一个语句中进行多个复制: Box box2 =  box1, box3= box2;

三对象的赋值和复制的区别

对象的赋值时一个已经存在的对象赋值,因此必须先定义赋值的对象,才能进行赋值。

Box box1(10,10,10),box2;  //先定义 box1,box2
box2 = box1; 	//把box1赋值给 box2

对象的复制是一个从无到有建立一个新的对象,并使它和一个已有的对象完全相同。
Box box1(10,10,10);  //先定义 box1
Box box2 = box1,box3 =box2; 	//把box1复制给 box2,box3

四构造函数和复制构造函数区别

(1)形式上
类名(形参列表);     //普通构造函数,  Box(int h, int w, int len);
类名(形参列表&对象);  //复制构造函数,Box(Box &b);
(2)建立对象时候,实参类型不同,调用不同的构造函数
Box box1(10,10,10); //实参是整数,调用普通的构造函数。
Box box2(box1); //实参是对象名,调用赋值构造函数
(3)在什么情况下被调用
普通构造函数在建立被调用。赋值构造函数在用已有对象赋值一个新对象被调用。
① 程序需要多个完全相同的对象时候。
②当函数参数为类时候, 在调用函数的时候需要将参数对完整的传递给形参,也需要建立一个实参的拷贝,就是按照实参复制一个形参,系统通过调用复制构造函数来实现的,这样保证实参和形参有完整的值。
int fun(Box b)
{
.....
.....
}
int main()
{
Box box1(12,12,21);
fun (Box1);    //实参是类的对象,调用函数将复制一个新对象 b
return 0;
}
③函数的返回值是类的对象。
Box f()
{
....
Box box1(10,10,10);
return box1;
}

int main()
{

Box box2;
box2=f();


}



注意:
复制构造函数是编译器自动实现的。
























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值