我坚持以下几点,可以使用一些帮助:
typedef unsigned short USHORT;
template <typename DataType>
class Primative
{
protected:
DataType m_dtValue;
public:
Primative() : m_dtValue(0) {}
DataType operator=(const DataType c_dtValue) { return m_dtValue = c_dtValue; }
DataType Set(const DataType c_dtValue){ return m_dtValue = c_dtValue; }
};
typedef Primative<USHORT> PrimativeUS;
class Evolved : public PrimativeUS
{
public:
Evolved() {}
};
int main()
{
PrimativeUS prim;
prim = 4;
Evolved evo;
evo.Set(5); // good
evo = USHORT(5); // error, no operator found which takes a right-hand operator...
}
看起来派生类没有得到重载运算符
最佳答案
试试这个:
class Evolved : public PrimativeUS
{
public:
using PrimativeUS::operator=;
Evolved() {}
};
为您提供的隐式
Evolved::operator=(const Evovled&)
隐藏了基类中存在的operator=
的所有实例。 (这对于任何方法都是正确的-派生类的方法会隐藏基类的名称相似的方法,即使签名不匹配也是如此。)