【问题标题】:C++ slicing in Java / C# [duplicate]Java / C#中的C++切片[重复]
【发布时间】:2010-10-06 21:09:30
【问题描述】:

C++ 切片是否也适用于其他语言,例如 Java/C#?

【问题讨论】:

  • 这是重复的。见What is the slicing problem in C++?
  • Raj,购买一本 Scott Meyer 的优秀著作《Effective C++》(sanitised Amazon link) 以进行关于这个问题和许多其他 C++ 陷阱的精彩讨论。 HTH 欢呼,
  • 这不是完全重复的。假定的副本对 C# 或 Java 没有任何要求。

标签: java c# c++ object-slicing


【解决方案1】:

切片意味着如果将子类实例分配给超类变量,则子类包含的额外信息将被“切片”掉,因为超类变量没有额外的空间来存储子类的这些额外信息。

这在 Java 和 C# 中都不会发生,因为所有对象变量都是引用;当您将子类实例分配给超类变量时,实际上只是复制了引用;子类对象本身保持不变。

【讨论】:

  • 我的术语有点偏离(现在更正了),但我认为我的意思不是。如果我仍然很不正确,请您更正。
  • 你的评论不是很有帮助,达菲莫。
  • C# 有值类型。我认为在 c# 中你的陈述是不正确的(?我是 c# 菜鸟。所以我在这里可能是错的),但对于 java 来说这当然是非常正确的。
  • 啊从来没提过。你不能从 C# 中的另一个结构派生一个结构
  • 你是对的。关于 C# 值类型(即结构),我的陈述是不正确的。对于类,它仍然是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2019-04-27
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多