问题标签 [object-slicing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
325 浏览

c++ - 为什么这行得通?(多重继承,切片)

考虑这个例子:

我很好奇的是assignBC 类的方法。通常,我对类型转换的期望是(B *) this类型转换thisB*并因此覆盖x成员,而不是y像它那样。然而,这段代码的作用恰恰相反:它正确吗?分配给 C 的 B 部分。

刚刚在 MSVC 2013 和 GCC 4.9.2 上测试过。两者的行为相同。

0 投票
2 回答
69 浏览

c++ - 我如何正确地将可能派生类的 shared_pointers 添加到 std::vector 中?

我基本上有这个设置:

addToVector不知道有多少类派生自 B 并且不应该关心。它将被称为:

所以在结束时someFunction, tmp 超出范围并将被删除。addToVector必须 push_back 一个 shared_ptr 到 tmp 的副本到向量中,但它怎么能做到呢?

它应该做的是:

  • 通过调用正确类的复制构造函数/操作符来复制 b 指向的对象
  • push_back 将 shared_ptr 复制到向量中。

我怎样才能做到这一点?

0 投票
1 回答
45 浏览

c++ - 调用虚拟方法而不是派生方法

我在继承函数时遇到问题,我似乎无法弄清楚它为什么会这样,并且无法在其他关于 SO 的问题中找到答案。
我正在开发一个小游戏,继承的函数负责玩家和对象之间的交互,如果玩家试图移动到已经被“障碍”的各种子类之一占据的空间,它将调用该对象的“Bool GetMove”方法,然后执行其独特的规则,如果游戏可以将玩家放置在空间上,则返回 True,否则返回 False。

这是基类标头及其 getmove 方法:

继承的类之一及其 getmove 方法:

该方法调用如下:

我考虑过将 Obstacle 对象更改为纯虚拟对象,但我需要其他地方的虚拟“Obstacle”对象,所以这不是一个选项。

0 投票
1 回答
670 浏览

python - 多重条件切片(熊猫数据框)

我有一个包含各种数据列和行的数据框。我想选择 Year 列 = 2015 和 Month 列 = 7 的所有行。

以下作品:

然而,有没有更优雅的方式来表达同样的事情?即更少的文本,因为我可以看到总文本如何失去对多个条件查询的控制。

0 投票
0 回答
139 浏览

python - 如何根据列中的值划分数据集?

我有一个熊猫数据框,其中有一列将日期表示为:

它看起来像这样(使用周作为时间单位重新编码):

我想做的是每周创建一个新的熊猫数据框。换句话说,我应该获得一个数据框,其中仅包含“ts_placed”列中值为 42 的元素 一个数据框仅包含“ts_placed”列中值为 43 的元素,依此类推。

0 投票
2 回答
148 浏览

c++ - 使用基对象和派生对象的虚函数

我已经阅读了关于 vtable 并理解了指向基类和派生类对象的基类指针的概念。有人可以解释当基类和派生类都是对象并且派生类对象分配给基类对象时如何创建vtable的情况。以下示例中的案例 3

输出:

0 投票
3 回答
83 浏览

c++ - 虚函数中构造函数调用的混淆

通过临时对象作为函数中的参数调用构造函数时的混淆

我的问题是为什么没有调用基类的默认构造函数,当我们在函数中创建基类的临时对象时( void somefunc(Base obj) )

0 投票
8 回答
1399 浏览

c++ - 如何将不同的类存储在一个向量中?

所以我有一个充满游戏所有对象的向量;诸如玩家对象、敌人对象、墙壁等之类的东西……向量中的所有事物都是 的子对象Framework,所以我制作了向量类型Framework,因为这对它们来说是最接近通用数据类型的东西。

问题是它没有从它存储的对象中运行覆盖的函数。所以我用谷歌搜索发现我显然是通过将它们存储为对象切片来进行的Framework。所以我的问题是,如何将所有这些对象存储在一个列表中?

仅供参考,这是调用应该被覆盖的函数的地方。

提前致谢。

0 投票
1 回答
334 浏览

c++ - 在 C++ 的接口中使用引用或指针

我正在用 C++ 编写一个库,并且想知道使用引用和/或指针代替接口(即使用(抽象)基类作为派生类的占位符)。

问题是,我应该选择两者中的哪一个?我应该更喜欢一个吗?使用对(抽象)基类的引用而不是指针有什么区别吗?

请查看以下代码摘录,并对任何问题发表评论:

我想,在上面的代码中,我在将子对象复制分配给父对象时进行对象切片。但是,假设我没有做任何对象切片(如前两次调用someFunc),参考方法会做我打算做的事情吗?dynamic_cast在决定调用哪个多态函数时,引用和指针方法是否都在内部使用?或者,我完全错过了这里的重点吗?

在此先感谢您的时间!

0 投票
3 回答
957 浏览

c++ - 对象切片如何导致内存损坏?

C++ 专家和 D 语言创造者Walter Bright说:

切片问题很严重,因为它会导致内存损坏,并且很难保证程序不会受到影响。为了在语言之外设计它,支持继承的类应该只能通过引用访问(而不是通过值)。D 编程语言具有此属性。

如果有人通过给出对​​象切片问题导致内存损坏的 C++ 示例来解释它会更好吗?而D语言是如何解决这个问题的呢?