设A为基类,B为公共(public)派生类。

B b;

切片:
A a = b;

上投:
A* p = &b; // p is a pointer variable of type A
A& r = b; // r is a reference variable of type A

这样对吗?如果可能,请分享相似的示例来说明这两个概念。

最佳答案

是的!

对象切片发生在将派生类对象分配给基类对象时,将派生类对象的其他属性切开以形成基类对象。

所以是的,如果您有基类A

class A{
  public:
    int x;
    char y;
};

以及从A公开派生的B类,其中包含一些额外的数据成员,
class B:public A{
  public:
    int z;
};

A a = b;会切掉'z'。

向上转换是将派生类类型的指针或引用转换为基类类型的指针或引用,并在继承树中向上转换。
B objB;
A *objA = &objB;

您可以将基类的指针(引用)转换为派生类的指针(引用),这就是向下转换(与向上转换相反)。
B *objB = (B *) &A;
但是无法将基类对象分配给派生类对象。

干杯!

关于c++ - 切片vs向上转换::我的理解正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29426576/

10-13 05:44