我对分配派生类的基对象感到困惑。说我有一个类型:
class Base {
// stuff omitted for brevity
}和一个派生类
Derived : public Base {
// stuff omitted
}我遇到了这样的情况:
Derived = Base;这个是可能的吗?这次行动叫什么?我怎么会做这种事?
谢谢你的帮助。
发布于 2013-08-16 02:16:23
这是一个非常普通的用户定义的分配,看起来很像“切片”,将基类当作一个成员来处理,从而混淆了粗心大意的人。但这不是切片。对于您所处的情况,这两个类可能没有关联,您可以这样定义赋值。
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;
}
};但是编译器并没有给出特殊的处理,它和任何函数调用都是一样的。
发布于 2013-08-16 01:29:29
您几乎不应该将基类对象分配给派生类对象,因为派生对象只分配了部分可能不一致的派生对象。但是,有时可能需要将基类对象的指针转换为派生类对象的指针。
Base *pb = new Derived;
..
Derived *pd = dynamic_cast<Derived*>(pb);当您想要标识基指针所指向的对象的确切类型(但实际上指向被驱动的对象,如本例中所示)时,就会使用这种方法。通常你应该避免这样做,因为这很费时,而且也不是一个好的设计。
发布于 2013-08-16 01:45:31
这就是所谓的object slicing,它通常是一件坏事。派生类是具有更多内容的基类。因此,当您将派生对象分配给Base对象时,额外的内容应该发生什么呢?这个手术不合逻辑。
https://stackoverflow.com/questions/18264394
复制相似问题