c++ - 从抽象类重载算术运算符
问题描述
我想对以下内容使用多态的 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,b2
的derive
班级
解决方案
推荐阅读
- python - Pandas 绘图条顺序类别
- sql - Oracle DB 中复杂的 SELECT 语句
- html - 如何防止此导航栏崩溃?
- laravel - 如何在 Laravel 5.4 中组合模型和按模型排序两个数据
- reactjs - Webpack+SemanticUI+React:进程未定义
- python - 在散列中使用 .digest()?
- c++ - c ++ CreateThread非静态成员没有特定成员名称
- php - 具有非原始类型提示参数的 Laravel API 端点
- excel - VBA range.formula 问题(LEN、RIGHT 和 LEFT)
- python - 无法在 python 脚本中运行 os.popen