CRITICAL SKILL 9.2: Assigning Objects 两个对象之间赋值

翻译 2011年10月18日 11:54:28

CRITICAL SKILL 9.2: Assigning Objects 对象之间赋值

If both objects are of the sametype (that is, both are objects of the same class), then one object can beassigned to another. It is not sufficient for the two classes to simply bephysically similar—their type names must be the same. By default, when oneobject is assigned to another, a bitwise copy of the first object’s data isassigned to the second. Thus, after the assignment, the two objects will beidentical, but separate. The following program demonstrates object assignment:

#include <iostream>

using namespace std;

class Test

{

         int a,b;

public:

         voidsetab(int i, intj){a = i, b = j;}

         voidshowab(){

                   cout<<"a is "<< a <<"  b is "<<b <<'\n';

         }

};

int main()

{

         Test ob1, ob2;

         ob1.setab(10, 20);

         ob2.setab(0, 0);

         cout<<"ob1before assignment: ";

         ob1.showab();

         cout<<"ob2before assignment: ";

         ob2.showab();

 

         ob2 = ob1;        //assign ob1 to ob2

         cout<<"ob1after assignment: ";

         ob1.showab();

         cout<<"ob2after assignment: ";

         ob2.showab();

 

         ob1.setab(-1, -1);

         cout<<"ob1after changing ob1: ";

         ob1.showab();

         cout<<"ob2after changing ob1: ";

         ob2.showab();

         return0;

}

Output:

As the program shows, theassignment of one object to another creates two objects that contain the samevalues. The two objects are otherwise still completely separate. Thus, asubsequent modification of one object’s data has no effect on that of theother. However, you will need to watch for side effects, which may still occur.For example, if an object A contains a pointer to some other object B, thenwhen a copy of A is made, the copy will also contain a field that points to B.Thus, changing B will affect both objects. In situations like this, you mayneed to bypass the default bitwise copy by defining a custom assignmentoperator for the class, as explained later in this module.

>>>>>>如果两个对象有相同的类型(就是说,两个都是同一个类的对象),那么一个对象可以赋给另一个对象。两个类在简单的物理上类似是不够的,必须要有相同的类型。默认情况下,当一个对象赋个另一个对象的时候,第一个对象的数据会逐位的拷贝给第二个对象。因此在复制之后,两个对象将会相同,但是在物理上(内存空间)是相互分割的。以下码片演示了对象的赋值:

<<<<<<代码和输出如上所示>>>>>>

       如码片显示,在一个对象给另一个对象赋值的是,所创建的两个对象有包含相同的值。但是两个对象仍然是相互独立的。虽然如此,但还是有副作用出现的情况。如,如果对象A包含指向对象B的指针,那么在对A做拷贝的时候,拷贝的内容将会包含一个指向B的域(指针)。因此,改变B会影响两个对象。在中情况下,应该给类定义一个用户的赋值操作,而不是使用默认的bits位值拷贝。稍后会介绍。

>>>>>>>>>>>>>>>>>>>>>>>translatedby ouyangjun

>>>>>>>>>>>>>>>>>>>>>>>e-mail:ouyangjun1985#msn.com

CRITICAL SKILL 9.4: Returning Objects 对象的返回

CRITICAL SKILL9.4: Returning Objects 对象的返回 Just as objects can be passed to functions, functionscan...
  • ouyangjun5891
  • ouyangjun5891
  • 2011-10-18 17:02:18
  • 262

两个java对象相同属性赋值

一、简介:         BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多...
  • hm_55
  • hm_55
  • 2015-07-21 15:24:06
  • 220

Java 对象之间相同属性的赋值

参考文章1.BeanUtils.copyPropertiesimport org.springframework.beans.BeanUtils; User src = new User(); Use...
  • power0405hf
  • power0405hf
  • 2017-11-13 16:00:21
  • 754

java对象之间赋值详解

赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制到左边”。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一...
  • qq_26941173
  • qq_26941173
  • 2016-03-29 15:47:32
  • 11150

Java实现不同的类的属性之间相互赋值

在开发的时候可能会出现将一个类的属性值,复制给另外一个类的属性值,这在读写数据库的时候,可能会经常的遇到 ,特别是对于一个有继承关系的类的时候,我们需要重写很多多余的代码,下面有一种简单的方法实现该功...
  • u010870518
  • u010870518
  • 2015-07-29 13:11:17
  • 3927

* Java 两个 Java bean 之间的赋值

/**  * bean 之间的赋值  *   * @author gao  *  */ public class BeanToBean { /** * 两个bean之间相互传值 *  * @par...
  • gaoqiao1988
  • gaoqiao1988
  • 2016-01-13 17:02:33
  • 1742

两个具有相同属性的对象之间属性的拷贝

在处理业务逻辑时,偶尔会有这样的需求:对象A已经实例化,但是有一些格式上的不符合标准,对象B没有具体的属性值但是格式却符合标准。 一般这样的情况会出现在DTO对象与VO对象之间。DTO需要实现序列化...
  • amanicspater
  • amanicspater
  • 2017-06-07 18:41:58
  • 704

java两个对象之间传值,简单的封装

使用SSH框架的过程中,经常涉及到修改,我们只要对部门的部门属性进行修改我们通常的做法是先从数据库把对象查询出来target,再把从页面上传递来的修改过的值封装成为一个对象model,我们需要把mod...
  • u010398771
  • u010398771
  • 2017-03-26 23:32:14
  • 1432

Cocoapods 报警告Automatically assigning platform ios with version 9.0 on target....

Automatically assigning platform iOS with version 9.0 on target 你的工程名称 because no platform was spe...
  • ygh5123687
  • ygh5123687
  • 2017-09-02 09:52:09
  • 471

c#两个对象,同属性赋值

几年前有写过一篇文章,找不到了,这里贴下实验代码: public class ModelBinding { /// /// 模型赋值 /// /// 目标 ...
  • Joyhen
  • Joyhen
  • 2017-09-06 21:18:00
  • 887
收藏助手
不良信息举报
您举报文章:CRITICAL SKILL 9.2: Assigning Objects 两个对象之间赋值
举报原因:
原因补充:

(最多只允许输入30个字)