我有一个派生类,它是一个非常薄的基类包装器。基本上,我有一个类,它有两种可以根据你解释它的方式进行比较的类,所以我创建了一个从基类派生的新类,并且只有新的构造函数(只委托给基类)和一个新的operator==
. 我想做的是operator Base&()
在派生类中重载,所以在我需要将其解释为基础的情况下。
例如:
class Base
{
Base(stuff);
Base(const Base& that);
bool operator==(Base& rhs); //typical equality test
};
class Derived : public Base
{
Derived(stuff) : Base(stuff) {};
Derived(const Base& that) : Base(that) {};
Derived(const Derived& that) : Base(that) {};
bool operator==(Derived& rhs); //special case equality test
operator Base&()
{
return (Base&)*this; //Is this OK? It seems wrong to me.
}
};
如果你想要一个我想要做的简单示例,假设我有一个 String 类,并且String==String
是典型的逐字符比较。但是我创建了一个新类CaseInsensitiveString
,它进行了不区分大小写的比较,CaseInsensitiveString==CaseInsensitiveString
但在所有其他情况下,它的行为就像一个字符串。它甚至没有任何新的数据成员,只是一个重载的operator==
. (请不要告诉我使用 std::string,这只是一个例子!)
我这样做对吗?有些东西看起来很可疑,但我不能指望它。