C++初学者指南 第九篇(2)

来源:互联网 发布:网络拓扑结构的概念 编辑:程序博客网 时间:2024/04/29 19:34

必备技能9.2:对象之间相互赋值

如果两个对象是同一个类型的(也就是说,两个对象是同一个类的对象),那么就可以把一个对象赋值给另外的一个对象。两个类只在物理构成上相似是不行的,它们的类名必须相同才行。缺省情况下,当把一个对象赋值给另外一个对象的时候,执行的是从一个对象到另外一个对象的逐位拷贝。赋值之后,两个对象在值上将是相同的,但是还是两个区分独立的对象。下面的程序演示了对象之间的赋值。

//对象之间的赋值   #include <iostream>   using namespace std;  class Test  {      int a, b;  public:      void setab(int i, int j)      {          a = i;          b = j;      }      void showab()      {          cout << "a is " << a << '\n';          cout << "b is " << b << '\n';      }  };  int main()  {      Test ob1, ob2;      ob1.setab(10, 20);      ob2.setab(0, 0);      cout << "ob1 before assignment:\n";      ob1.showab();      cout << "ob2 before assignment:\n";      ob2.showab();      cout << "\n";      ob2 = ob1; //把ob1赋值给ob2       cout << "ob1 after assignment:\n";      ob1.showab( );      cout << "ob2 after assignment:\n";      ob2.showab( );      cout << "\n";      ob1.setab(-1, -1);  //修改ob1的值       cout << "ob1 after changing ob1:\n";      ob1.showab( );      cout << "ob2 after changing ob1:\n";      ob2.showab( );      cout << "\n";        }  

上面程序的输出如下:

ob1 before assignment:
a is 10
b is 20
ob2 before assignment:
a is 0
b is 0

ob1 after assignment:
a is 10
b is 20
ob2 after assignment:
a is 10
b is 20

ob1 after changing ob1:
a is -1
b is -1
ob2 after changing ob1:
a is 10
b is 20

 

正如上面程序演示的那样,把一个对象赋值给另外一个对象会使得两个对象的值一样。但是这两个对象依然是完全独立的两个对象。因此,后续对其中一个对象值的修改不会影响到另一个对象。这样也有可能带来副作用。例如,当对象A含有一个指向其他对象B的指针的时候,该对象A的副本也将含有指向B的指针。这样以来,对对象B的修改将会同时影响到对象AA的副本。在这样的情况下,我们需要通过自己定义赋值运算符,从而忽略这种缺省逐位拷贝的操作。这点我们将在本章的后面进行讨论。

原创粉丝点击