0

我已经广泛搜索了这个问题的具体答案,但找不到。我正在尝试使用可以在派生类中覆盖的虚拟运算符> 创建一个基类。目前我遇到了问题,因为声明函数只需要一个输入变量(如“bool operator>(Derived & a)”但试图在 cpp 文件中定义它告诉我它需要两个输入(如“bool operator >(派生和a,派生和b))

我尝试过定义内联运算符,但随后我得到错误,它认为派生类仍然是抽象的,因为我将派生类型传递给运算符,如上所示,而不是基类。但是,如果我通过基类,那么我无法访问派生成员变量,我需要进行比较。

我想我在这里遗漏了一些简单的东西,但我似乎无法弄清楚它是什么。

希望您能提供帮助。谢谢

4

3 回答 3

0
#include <iostream>
using namespace std;
class base{
public :
        virtual bool operator> (base& obj) { cout<<"b\n";return true;}
        virtual ~base(){}
};

class derived: public base{
public:
        virtual bool operator> (derived& obj) { cout<<"d\n";return true;}
        ~derived(){}
};

int main()
{

base *a=new derived(),b;
if(*a>b) { delete a; cout<<"Done!\n"; }

return 0;
}
于 2013-01-12T00:31:08.543 回答
0

要从基的引用/指针进行虚拟调用,您将需要在函数中使用基类型,例如

class Derived : public Base
{
    .... 
    bool operator>(Base &a)
    {
         Derived *pa = dynamic_cast<Derived *>(&a);
         return this->something > pa->something;   // Or whatever... 
    }

   .... 
};

如果你改变类型,它变成一个不同的函数,当你使用基指针或引用来引用operator>时,它将使用基类中的那个。

于 2013-01-11T23:09:35.023 回答
0

你为什么不离开operator>()非虚拟,并让它调用一个私有虚拟函数?

像这样:

class Base {
public:
    bool operator>(Base &a) {
        return implementingFunction(a);
    }

private:
    virtual bool implementingFunction(Base &a) = 0;
};
于 2013-01-11T23:13:06.743 回答