首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将类分配给基类?

如何将类分配给基类?
EN

Stack Overflow用户
提问于 2013-08-16 01:24:07
回答 3查看 89关注 0票数 0

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

代码语言:javascript
复制
class Base {
 // stuff omitted for brevity
}

和一个派生类

代码语言:javascript
复制
Derived : public Base {
  // stuff omitted
}

我遇到了这样的情况:

代码语言:javascript
复制
Derived = Base;

这个是可能的吗?这次行动叫什么?我怎么会做这种事?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-16 02:16:23

这是一个非常普通的用户定义的分配,看起来很像“切片”,将基类当作一个成员来处理,从而混淆了粗心大意的人。但这不是切片。对于您所处的情况,这两个类可能没有关联,您可以这样定义赋值。

代码语言:javascript
复制
struct d : b {
     d &operator=(const b &b_) { /*do the work here*/; return *this; }
};

您可能可以使用基类的副本赋值运算符,也可以不使用:

代码语言:javascript
复制
struct dx : b {
    dx &operator=(const b &b_)
    {
        this->b::operator=(b_);
        // more work
        return *this;
    }
};

但是编译器并没有给出特殊的处理,它和任何函数调用都是一样的。

票数 1
EN

Stack Overflow用户

发布于 2013-08-16 01:29:29

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

代码语言:javascript
复制
Base *pb = new Derived;
..
Derived *pd = dynamic_cast<Derived*>(pb);

当您想要标识基指针所指向的对象的确切类型(但实际上指向被驱动的对象,如本例中所示)时,就会使用这种方法。通常你应该避免这样做,因为这很费时,而且也不是一个好的设计。

票数 0
EN

Stack Overflow用户

发布于 2013-08-16 01:45:31

这就是所谓的object slicing,它通常是一件坏事。派生类是具有更多内容的基类。因此,当您将派生对象分配给Base对象时,额外的内容应该发生什么呢?这个手术不合逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18264394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档