gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:28 24 4
gpt4 key购买 nike

如何让类中的重载关系运算符从父类中的函数调用,该函数将对基类的 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;
}

如何让基类中的比较函数调用子类中的 == 运算符,同时记住我还有其他子类?

我试过 dynamic_cast<> 但由于某些原因它不会工作。

最佳答案

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

唯一的要求是在 Integer 类中保留 Object::isEqual 签名。您还应该记住,您的 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);
};

关于c++ - 如何从父类中的函数调用子类的重载运算符,该函数将对父类的引用作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com