切片与上传::我的理解是否正确?

时间:2015-04-03 05:13:53

标签: c++

让A成为基类,B成为公开派生的类。

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

这是对的吗?如果可能,请分享类似的例子来说明这两个概念。

1 个答案:

答案 0 :(得分:1)

是!

将派生类对象分配给基类对象时会发生

对象切片,派生类对象的其他属性会被切除以形成基类对象。

所以是的,如果你有一个基类A

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

和B类从A公开派生,带有一些额外的数据成员,

class B:public A{
  public:
    int z;
};

执行A a = b;将切断'z'。

向上转换是将派生类类型的指针或引用转换为基类类型的指针或引用,在继承树中上升。

B objB;
A *objA = &objB;

为了更多地了解这个主题,你可以将基类指针(引用)转换为派生类指针(引用)。它被称为向下转换(与向上转换相反)。

B *objB = (B *) &A;

但是你无法将基类对象分配给派生类对象。

干杯!