将类分配给基类,该怎么做?

时间:2013-08-16 01:24:07

标签: c++ polymorphism

我对分配派生类的基础对象感到困惑。说我有一个类型:

class Base {
 // stuff omitted for brevity
}

和派生类

Derived : public Base {
  // stuff omitted
}

我的情况就是这样:

Derived = Base;

这可能吗?这个操作叫什么?我怎么做这样的事情?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是一个完全普通的用户定义的赋值,它看起来像“切片”,将基类视为成员,可以混淆不谨慎的人。但它不是切片。对于你所拥有的情况,这两个类可能也不相关,你可以用这种方式定义赋值。

struct d : b {
     d &operator=(const b &b_) { /*do the work here*/; return *this; }
};

您可以使用基类的复制赋值运算符,也可以不使用:

struct dx : b {
    dx &operator=(const b &b_)
    {
        this->b::operator=(b_);
        // more work
        return *this;
    }
};

但编译器没有给出特殊处理,它与任何函数调用相同。

答案 1 :(得分:0)

您几乎不应该将基类对象分配给派生类对象,因为派生对象只是部分分配,可能不一致。但有时您可能需要将基类对象的指针强制转换为派生类对象的指针

Base *pb = new Derived;
..
Derived *pd = dynamic_cast<Derived*>(pb);

当您想要识别基指针所指向的对象的确切类型(但实际上指向被驱动的对象时,如此示例中),则使用此选项。通常你应该避免这种情况,因为它耗时,并且它不是一个好的设计。

答案 2 :(得分:0)

这称为object slicing,这通常是一件坏事。 Derived类是一个包含更多内容的Base类。因此,当您将Derived对象分配给Base对象时,额外的东西会发生什么?该操作没有逻辑意义。