首页 > 解决方案 > 从抽象类重载算术运算符

问题描述

我想对以下内容使用多态的 c++ 重载:

我有一个类DataTypes这个类将包含一个指向抽象类的指针base

class base
{
public:
    virtual base& operator+(const base &obj) = 0;
};

class derive: public base
{
public:
    virtual derive& operator+(const base &obj)
    {
        cout << "overloading base" << endl;
        return *this;
    }

    virtual derive& operator+(const derive &obj)
    {
        cout << "derive + derive" << endl;
        return *this;
    }
};

会有很多派生类,我想写以下内容:

    base* b1 = new derive();
    base* b2 = new derive();
    *b1+*b1;

这将返回打印overloading base

如果我这样做,我会得到我正在寻找的东西:

    *(dynamic_cast<derive*>(b1))+*(dynamic_cast<derive*>(b2));
OR
    *(static_cast<derive>(b1))+*(static_cast<derive*>(b2));

这将产生所需的打印derive + derive

我的问题是如何在不强制转换的情况下执行此操作?或者如果需要强制转换,它怎么可能是动态的?因为动态转换并不是真正动态的,除非它是这样的:

    *(dynamic_cast<typeof(b1)>(b1))+*(dynamic_cast<derive*>(b2));

但这不起作用。

编辑:要清楚,该类的成员类DataTypes将是一个名为 的抽象类base,但对它的访问将像提到的那样b1+b2。来自哪里b1,b2derive班级

标签: c++ooppolymorphismc++17

解决方案


推荐阅读