首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于另一个类创建新的派生类型

基于另一个类创建新的派生类型
EN

Stack Overflow用户
提问于 2017-12-08 00:42:42
回答 1查看 145关注 0票数 1

我试图从指向派生类的父类指针中获取一个新的派生类指针(具有新的内存位置)。

代码语言:javascript
运行
复制
#include <iostream>
#include <random>
class parent{
public:
    virtual void print(){
        printf("p\n");
    }
};

class dev1: public parent{
public:
    void print(){
        printf("d1\n");
    }
};

class dev2:public parent{
public:
    void print(){
        printf("d2\n");
    }
};

int main(int argc, const char * argv[]) {
    srand(time(NULL));

    parent*bob;

    if(rand()%2){
        bob = new dev1();
    }else{
        bob = new dev2();
    }
    bob->print();

    parent * bobwannabe;

    bobwannabe = new typeof(*bob);

    bobwannabe->print();

    return 0;
}

我希望bobwannabe能打印出bob的指纹。bobwannabe不应该指向与bob相同的对象,而应该指向与bob相同的类。

现在,bobwannabe成了一个新的父母。有没有办法把它变成一个新的鲍勃与它的当前类型,或有一个特定的术语,我应该搜索?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 09:45:43

你想要的是克隆这个对象。您需要通过添加一个虚拟克隆方法并将构造函数复制到父类来实现这一点:

代码语言:javascript
运行
复制
 virtual parent * clone() const { return new parent(*this); }

并覆盖中的所有派生类,如dev1

代码语言:javascript
运行
复制
 virtual parent * clone() const override { return new dev1(*this); }

并与下列物品一起使用:

代码语言:javascript
运行
复制
 parent *bobwannabe = bob->clone();

请参见'typeid' versus 'typeof' in C++,不要忘记删除对象或使用智能指针。

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

https://stackoverflow.com/questions/47706074

复制
相关文章

相似问题

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