假设我有一个指向抽象类的指针数组:
Piece *pieces[2]; // where piece is an abstract class
我有两个扩展
Piece
的类,分别称为King
和Queen
。我将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/