假设我具有以下类层次结构:
class A {
int x;
};
class B : public A {
float y;
};
class Foo {
A* obj;
};
class Bar : public Foo {
B* obj; // I want this to override "obj" in the superclass!
};
我知道Bar
将遮盖超类obj
的{{1}},而实际上Foo
将具有两个字段。但是我真正想要的是,如果某些代码能够看到类型为Bar
的对象,他们还可以假定其指针Bar*
指向类型为obj
的指针。我该怎么做?
我想到了两种方法:
B
,以指定其指针的类型。然后,将Foo
改写为Bar
。这样会增加模板,而且可能很丑。Bar : public Foo<B>
中添加将Bar
强制转换为obj
的getter,并确保(在构造函数,setter等)中,B*
仅设置为obj
类型。这很不雅致,因为它不是真正的编译时,需要强制转换。是否有没有上述缺点的更好的解决方案?
谢谢!
答案 0 :(得分:0)
尝试一下:
class A {
int x;
};
class B : public A {
float y;
};
class Foo {
protected:
A* obj;
};
class Bar : public Foo {
B* obj; // I want this to override "obj" in the superclass!
public:
void edit_foo_obj(A* n_obj) {
Foo::obj = n_obj;
}
void edit_bar_obj(B* n_obj) {
this->obj = n_obj;
}
};
int main()
{
Bar b;
A a;
B ba;
b.edit_bar_obj(&ba);
b.edit_foo_obj(&a);
return 0;
}