如何从父类中的函数调用子函数的重载运算符,该父类具有对父作为参数的引用?

时间:2016-09-24 09:40:44

标签: c++ inheritance polymorphism operator-overloading

如何在类中调用一个重载的关系运算符,从父类中的一个函数调用一个const引用作为参数?以下代码演示了我想要做的事情:

class Object 
{
public:
    virtual ~Object(void);
    virtual int compare(Object const& obj) const;
};

int Object::compare(Object const & obj) const {
    if(this == &obj)
    {
        return 0;
    }
    else if(this < &obj)
    {
        return -1;
    } else{
        return 1;
    }
}

class Integer: public Object
{
private:
    int myInt;
public:
    Integer(int i);
    bool operator==(const Integer& integer);
};

bool Integer::operator==(Integer const &integer) {
    if(myInt == integer.myInt)
    {
        return true;
    }
    return false;
}

如何在基类中使用compare函数来调用子类中的==运算符,请记住我还有其他子类?

我试过了dynamic_cast&lt;&gt;但由于某种原因,它不会工作。

2 个答案:

答案 0 :(得分:0)

您可以添加另一个虚拟方法isEqual以与Integer::operator==连接。

唯一的要求是将Object::isEqual签名保留在班级Integer中。您还应该记住,Object::compare方法可以(意外地)调用不同类型的对象。

class Object 
{
protected:
    virtual bool isEqual(Object const& obj) const
      { return this == &obj; }
public:
    virtual ~Object(void);
    virtual int compare(Object const& obj) const;
};

int Object::compare(Object const & obj) const {
    if(isEqual(obj))
    {
        return 0;
    }
    else if(this < &obj)
    {
        return -1;
    } else{
        return 1;
    }
}

class Integer: public Object
{
private:
    int myInt;
protected:
    virtual bool isEqual(Object const& obj) const
      { if (!dynamic_cast<const Integer*>(&obj))
          return false;
        return *this == (const Integer&) obj;
      }
public:
    Integer(int i);
    bool operator==(const Integer& integer);
};

答案 1 :(得分:0)

我愿意:

compare

但实际上你应该在继承的类中提供虚拟class Object { public: virtual ~Object(void) {}; virtual int compare(Object const& obj) const = 0; }; class Integer: public Object { private: int myInt; public: Integer(int i) : myInt(i) { }; virtual int compare(Object const& object) const override; bool operator==(Integer const& integer) const; bool operator<(Integer const& integer) const; bool operator>(Integer const& integer) const; }; int Integer::compare(Object const& object) const { Integer const& ref = dynamic_cast<Integer const&>(object); if(ref == *this) return 0; else if(ref > *this) return 1; else return -1; } bool Integer::operator==(Integer const& integer) const { return myInt == integer.myInt; } bool Integer::operator<(Integer const& integer) const { return myInt > integer.myInt; } bool Integer::operator>(Integer const& integer) const { return myInt < integer.myInt; } 函数,如下所示:

cmd