2个派生类的虚拟函数(十六进制+二进制)

时间:2019-05-26 10:44:38

标签: c++

我有基类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都转换为小数,进行加法,然后再次转换?

谢谢。

1 个答案:

答案 0 :(得分:1)

由于您的类是多态的,因此Add()函数应采用引用或指针参数:

class Array {
    // ...

    virtual Array& Add(Array&);
};

您现在可以使用其他返回类型覆盖派生类中的Add()

class Hex: public Array {
    // ...

    Hex& Add(Array&) override;
};

返回类型必须是进行覆盖的类的引用类型。这是唯一一种覆盖可以更改返回类型的情况。