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的修改将会同时影响到对象A和A的副本。在这样的情况下,我们需要通过自己定义赋值运算符,从而忽略这种缺省逐位拷贝的操作。这点我们将在本章的后面进行讨论。
- C++初学者指南 第九篇(2)
- C++初学者指南 第九篇(1)
- C++初学者指南 第九篇(3)
- c++初学者指南 第九篇(4)
- C++初学者指南 第九篇(5)
- C++初学者指南 第九篇(6)
- C++初学者指南 第九篇(7)
- C++初学者指南 第九篇(8)
- C++初学者指南 第九篇(9)
- C++初学者指南 第九篇(10)
- C++初学者指南 第九篇(11)
- C++初学者指南 第九篇(12)
- C+++初学者指南+第六篇(5)
- C+++初学者指南+第六篇(6)
- C+++初学者指南+第六篇(7)
- Objective-C初学者指南(第2版)
- C++:初学者的指南
- Objective-C 初学者指南
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
- 名言警句
- 设想:未来游戏之服务端平台开放客户端百花齐放
- C++初学者指南 第九篇(1)
- svn报错~~~
- C++初学者指南 第九篇(2)
- 夕阳无限好 只是近黄昏
- C++初学者指南 第九篇(3)
- Matlab空间常用命令
- jdbc的原理
- 表单提交数据get请求和post请求的区别
- EdmGen使用
- 母亲
- JERRY YAO