我在某些C++代码中遇到了一些棘手的问题,这些代码很容易用代码描述。我有一个是像类:在C++中重写一个成员变量
class MyVarBase
{
}
class MyVar : public MyVarBase
{
int Foo();
}
class MyBase
{
public:
MyBase(MyVarBase* v) : m_var(v) {}
virtual MyVarBase* GetVar() { return m_var; }
private:
MyVarBase* m_var;
}
我也有MyBase的子类,需要有类型MyVar的成员,因为它需要调用foo。将Foo函数移入MyVarBase不是一种选择。是否有意义做到这一点:
class MyClass : public MyBase
{
public:
MyClass(MyVar* v) : MyBase(v), m_var(v) {}
MyVar* GetVar() { return m_var; }
private:
MyVar* m_var;
}
这似乎是工作,但看起来真的不好,我不知道它是否会导致内存泄漏或断裂拷贝构造函数。我的其他选项可能是将MyClass中的MyVar变量命名为其他名称,但它与基础中的m_var指针相同,或者对MyVar类型中的MyBase进行模板化。
所有这些选项看起来并不理想,所以我想知道是否有其他人遇到过这样的情况,以及是否有一个好方法使其工作。
在这种情况下,我会使用dynamic_cast <>而不是static_cast <>。我认为它更好地捕捉了这个意图。 – coryan 2008-11-18 12:46:12