派生运算符<接收 Base 对象作为参数

Derived operator< receiving Base object as parameter

本文关键字:对象 参数 Base 接收 运算符 lt 派生      更新时间:2023-10-16

我知道派生类"是"基类,因此您始终可以将派生对象传递给基成员函数。现在,我想知道比较运算符的相反情况(基类不是抽象的,并且有对象)。

假设我有:

class Base:
{
    public:
        Base(int m1, string m2);
        virtual ~Base();
        int GetM1()const;
        string GetM2()const;
        virtual bool operator<(const Base& base)const;
    private:
        int m1;
        string m2;
};

我想做这样的事情:

class Derived: public Base
{
    public:
    Derived(string member);
    ~Derived();
    virtual bool operator<(const Base& base)const; // is this possible(without cast)???
};

谢谢

是的,这是可能的。Derived操作符将在如下代码中使用:

Base b;
Derived d;
if (d < b) {
    ...
}

你也可以有一些从Base派生的其他类,比如Derived1,它将被使用:

Derived1 d1;
Derived d;
if (d < d1) {
    ...
}