使用父对象的派生类

时间:2017-12-10 03:47:59

标签: c++ class

我希望在更新base类型的对象时更新派生类,因为它们与基础共享相同的引用。这将在已经创建基类之后完成。

class Tumor : sc2::Unit {
public:
    Tumor(const sc2::Unit *unit) : pointer(unit){}
    ~Tumor()

    float spread = 10.0f;
    float vision = 11.0f;
    // Other things...

    bool operator==(const Tumor& rhs) { return pointer->tag == rhs.tag; }
    const sc2::Unit *pointer = nullptr;        
};

而不是访问     tumor.pointer->tag 我希望它是:     tumor.tag

sc2::Unit有一个tag变量,当我输入

std::cout << "tumor_tag Address: " << &(this->pointer->tag) << "\tunit_tag Address: " << &(unit->tag) << std::endl;

在构造函数中,我将输出相同的内存位置。

我知道我可以在sc2::Unit中存储指向Tumor的指针(如图所示),但我试图找到一个更优雅的解决方案而且我的Google-foo很弱或者它& #39;不可能。

1 个答案:

答案 0 :(得分:0)

您不能使用继承在多个派生类实例之间共享基础的同一实例,因为通过定义派生类会创建自己的基础实例。

如果您不想使用tumor.pointer->tag构造,可以编写一个getter函数:

tag_type& Tumor::GetTag() {
    return pointer->tag;
} 

所以你要使用tumor.GetTag()