我希望在更新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;不可能。
答案 0 :(得分:0)
您不能使用继承在多个派生类实例之间共享基础的同一实例,因为通过定义派生类会创建自己的基础实例。
如果您不想使用tumor.pointer->tag
构造,可以编写一个getter函数:
tag_type& Tumor::GetTag() {
return pointer->tag;
}
所以你要使用tumor.GetTag()
。