对象的赋值

来源:互联网 发布:随机密码生成算法 编辑:程序博客网 时间:2024/06/06 20:56

对象的赋值

如果对一个类定义了两个或多个对象,则这些对象之间是可以进行赋值,或者说,一个对象的值可以赋值给另一个同类的对象。这里所指的值是指对象中所有数据的成员的值。对象之间进行赋值是“=”进行的,对象赋值的形式如下:
对象名1=对象名2;

#include <iostream>using namespace std;class Box{public:Box(int =10,int =10,int =10);int volume();private:int height;int width;int length;};Box::Box(int h,int w,int len){height=h;width=w;length=len;}int Box::volume(){return (height*width*length);}int main(){Box box1(15,20,25),box2;cout<<"1"<<box1.volume()<<endl;box2=box1;cout<<"1"<<box2.volume()<<endl;return 0;}

1.对象的赋值只对其中的数据成员赋值,而不能对成员函数赋值。赋值的过程是将一个对象的数据成员在存储空间的状态复制给另一个对象的数据成员的存储空间。
2.类的数据成员中不可包括动态分配的数据,否则在赋值时可能出现严重的后果。

对象的复制
有时会需要用到多个完全相同的对象,所以需要复制。有时需要将对象在某一瞬间时的状态保留下来。这就是更需要复制。用一个已有的对象快速的复制出多个完全相同的对象。如:

 Box box2(box1);

其作用就是用已有的对象box1去克隆出新对象box2.
其一般形式为:

    类名  对象名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;请与下面的定义语句作比较:

int a=4,b=a;这种形式看起来很直观,但是用起来很方便,但是其作用就是调用复制构造函数。

注意:赋值和复制的区别,对象的赋值是对已经存在的对象赋值,因此必须先定义被赋值的对象,才能进行赋值。而对象的复制则是从无到有的建立一个对象,并使它与一个已有的对象完全相同(包括结构和值)。

普通构造函数与复制构造函数的区别:
1.在形式上,

   类名(形参列表); //普通构造函数的声明,如Box(int h,int w,int len);   类名(类名 &对象名);  //复制构造函数的声明,如Box(Box &b);

2.在建立对象时,实参类型不同。系统会根据实参的类型决定调用普通构造函数或复制构造函数。

  Box  box1(12,15,16);     //实参为整数,调用普通的构造函数  Box box2(box1);           //实参是对象名,调用复制构造函数

3.在什么情况下被调用。

普通构造函数在程序中建立对象时被调用。

复制构造函数在已有对象复制一个新对象时被调用,一下3种情况需要克隆对象;

a.程序中需要建立一个对象,并用另一个同类的对象对她初始化

b.当函数的参数为类的对象时,在调用函数时需要将实参对象完整的传递给形参,也就是需要建立一个实参的拷贝,这就是按实参复制一个形参,系统是通过调用复制构造函数来实现的,这样能保证形参具有和实参完全相同的值。

转载:http://www.cnblogs.com/NongSi-Net/p/4262265.html

原创粉丝点击