C++ slicing in Java / C#
C++切片是否也适用于其他语言,比如爪哇/C?
这是一个副本。看看C++中的切片问题是什么?.
- Raj,买了一本Scott Meyer的优秀著作《有效C++》(StudioAmazon Link),用于对这个问题和许多其他C++的精彩讨论。欢呼,
- 这不是一个确切的副本。假定的副本不要求C语言或Java。
切片意味着如果将子类实例分配给一个超类变量,子类所包含的额外信息将被"切片"掉,因为超类变量没有额外的空间来存储子类的额外信息。
这不发生在Java中,也不在C语言中,因为所有的对象变量都是引用;当将子类实例赋值给超类变量时,实际上只复制引用;子类对象本身仍然完好无损。
- 我的术语有点不对劲(现在改了),但我认为我的观点不对劲。如果我还是错的,你能改一下吗?
- 你的评论没什么帮助,达菲莫。
- C具有值类型。我认为在C中你的陈述是不正确的(?我是C诺诺。所以我在这里可能错了,但是对于Java,它当然是真的。
- 啊,从没提过。不能从C中的另一个结构派生结构#
- 你说得对。关于C值类型(即结构),我的语句不正确。对于课堂来说,这仍然是正确的。
- 或者什么…我想我现在喝点咖啡;—)
- 只有一件事:达菲,你的评论是无用的:D和我现在看到你说的"子类",所以我想这已经排除了结构:)我应该更仔细地阅读。对不起,Mad-J。无论如何,我会+1这个:)
- 我的观点是,在Java和C语言中都发生切片。手术说不会发生。要么我误解了问题,要么手术室误解了。
- 在Java中,如果将子类赋值给超类var,则如果将超类转换为子类,则可以获取子类的数据。它不会被移除。例如,inner i=new inner(5);outer o=i;system.out.println((inner)o.getvalfrominnerconstructorarg())‌&8203;;我想给出:5
- DuffMyo,你能举一个Java中对象切片的例子吗?我不理解它是如何发生的,因为对象会自动分配他们需要的内存。内存分配不受引用变量类型的影响。