如何在类中调用一个重载的关系运算符,从父类中的一个函数调用一个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;但由于某种原因,它不会工作。
答案 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