c++ - 这会导致对象切片吗?

标签 c++ object-slicing

假设我有一个指向抽象类的指针数组:

Piece *pieces[2]; // where piece is an abstract class

我有两个扩展 Piece 的类,分别称为 KingQueen。我将 King 分配给 pieces 中的一个点,将 Queen 分配给另一个点:

pieces[0] = new King();
pieces[1] = new Queen();

如果我没有重载赋值运算符,是否会发生切片?还是 pieces[0]King 的一个实例而 pieces[1]Queen 的一个实例?该数组中发生了什么(如果这是 C++)?

编辑:查看相关代码的完整示例 here .

最佳答案

这实际上并没有编译:您不能将 King *(表达式 new King 的类型)分配给 Piece(表达式 *pieces[0] 的类型)。

不过,要回答您隐含的问题:

Piece *piece = new King(); // fine, no slicing, just assigning a pointer
*piece = Queen();          // oops, slicing - assigning a Queen to a Piece

在您问题的数组中,假设您编写了 pieces[0] = new King; 等,您只需存储两个 Piece 指针,其中一个指向 King,其中一个指向 Queen

关于c++ - 这会导致对象切片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651323/

相关文章:

c++ - 使用重载函数将 Python 'int' 提升为 C++ int

c++ - 私有(private)继承中的对象切片

c++ - 什么是对象切片?

c++ - 没有严格弱排序的有序集合

c++ - 哪个运营商删除?

C++/Gloox : how to check when connection is down?

c++ - 在继承的对象中切片

c++ - 作者所说的不良结果是什么?

c++ - 什么是对象切片?

c++ - 以 jpeg 格式发送 Iplimage 数据