面向对象难题,闲人请进
noho 2002-01-18 02:50:17 class CBase是一个类体系的基类,其它所有的类都从这个类派生
函数Equal原型如下,输入两个对象,比较这两个对象是否相等(不是指针相等!!!)
bool Equal(const CBase & obj1, const CBase & obj2)
或
bool Equal(const CBase * obj1, const CBase * obj2)
我尝试设计了两种方法
1、
class CBase
{
public:
virtual bool Equal(const CBase & rhs) const = 0;
};
2、
class CBase
{
public:
bool operator==(const CBase & rhs);
};
对于第一种方法,子类必须像下面的代码这样
class CFoo : public CBase
{
public:
virtual bool Equal(const CBase &rhs) const
{
};
};
Equal的实现就必须使用RTTI或者MFC的RUNTIME_CLASS机制,但是这两种机制个人觉得都不太好。
对于第二种方法,由于operator==不是虚的,所以Equal函数调用的是CBase::operator==,如果改成虚的,还会碰上和方法1一样的问题。
当然,在C++中,模板也是一种解决办法,但是不符合基于CBase的类体系。
另外,.NET Framework的Object就有Equals方法,不知道它是怎么实现的?