我有基类Array,其中有虚函数Add for
class Array
{
public:
unsigned char arr[100] = { 0 };
int size;
Array();
Array(int);
char operator[](int);
virtual Array& Add( Array);
};
我有两个派生类Hex(用于存储十六进制数)和BitString(用于存储二进制数):
class BitString : public Array
{
public:
BitString& operator&(BitString&);//and
BitString& operator|(BitString&);//or
BitString& operator^(BitString&);//xor
BitString& operator~();//not
};
class Hex: public Array
{
public:
Hex& operator+(Hex);
Hex& operator-(Hex);
Hex& operator*(Hex);
Hex& operator/(Hex);
bool operator==(const Hex);
bool operator>(const Hex);
bool operator<(const Hex);
Hex DecToHex(int);
};
除了为Hex和BitString进行make运算符外,我的任务是为添加的BitString和Hex对象覆盖虚拟Add函数。
我没有正确得到:
1)需要同时在Hex和BitString中创建2个函数
2)这些函数应该返回什么?十六进制,BitString或数组。
3)最快的方法是什么?将十六进制和BitString都转换为小数,进行加法,然后再次转换?
谢谢。
答案 0 :(得分:1)
由于您的类是多态的,因此Add()
函数应采用引用或指针参数:
class Array {
// ...
virtual Array& Add(Array&);
};
您现在可以使用其他返回类型覆盖派生类中的Add()
:
class Hex: public Array {
// ...
Hex& Add(Array&) override;
};
返回类型必须是进行覆盖的类的引用类型。这是唯一一种覆盖可以更改返回类型的情况。