使用父对象的派生类

Derived class utilizing a parent object

本文关键字:派生 对象      更新时间:2023-10-16

当更新类型基础对象时,我想进行派生的类更新,因为它们与基数共享相同的参考。这将在已经创建基类之后完成。

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却很弱或不可能。

您不能使用继承在派生类的多个实例之间共享基础的相同实例,因为按定义派生的类创建了基础的实例。

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

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

所以您将使用它tumor.GetTag()