gpt4 book ai didi

oop - 在面向对象编程中复制对象的目的是什么?

转载 作者:行者123 更新时间:2023-12-02 08:29:43 24 4
gpt4 key购买 nike

我已经学习 c# 大约 3 个月了,今天我遇到的一件事是对象的深拷贝构造函数和浅拷贝构造函数的概念(刚刚习惯了基类、继承和实例化的概念——多态性老实说,我还没有真正沉浸其中……我离题了)。

当看到基类(在本例中为用户类)上的深度复制构造函数时,我的第一个想法是“你到底为什么要复制一个对象?”。我看过的文章解释了如何做到这一点以及它是如何工作的,但我仍然无法找到任何实际示例来说明为什么要这样做。如果我有一个 person 类,我肯定会创建一个新的 person 类实例吗?

我很感激这里可能缺少一些基本的东西,但如果有人能填补空白,那就太好了。一个真实的例子来证明它的用处会更好!干杯!

最佳答案

在许多情况下,您可能需要复制一个对象。

  • 为方便起见:在创建对象时,通常需要对其进行初始化,可以是调用方法设置值的形式,也可以是向构造函数传递参数的形式.有时,执行所有这些初始化可能需要大量工作。如果您想要一个新对象 B,它与另一个对象 A 仅相差一个值,那么获取 A 的副本作为 B 并更改 B 的单个值可能更容易,而不是从头开始创建 B。

  • 因为逻辑需要它:当一个国际象棋算法想要采取下一步行动时,它可能会在内部制作当前棋盘的许多副本,用许多副本中的一个修改每一个它可能采取的行动,使用一些启发式方法评估每个新板,选择最好的,然后将其用作新的当前板。

  • 防御性:当一个 Person 对象被要求提供它的 DateOfBirth 时,它可能不一定返回对其的引用自己的 DateOfBirth,因为随后有人可能会更改 Date 对象,从而更改 Person 的 DateOfBirth。因此,Person 对象很可能会返回其 DateOfBirth防御性副本

  • 拍摄快照:如果我有一个要调用的事件观察器列表,我可能想要拍摄该列表的(浅)快照副本在开始调用观察者之前,因为观察者可能会在我处理列表时决定注销自己,这将带来灾难性的后果。 (ConcurrentModificationException,查一下。)

关于oop - 在面向对象编程中复制对象的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com