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

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/

10-08 22:50