C++ c++;运营者超载及;多态性
多态性和运算符重载是否混合在一起? 如中所述,在没有指针的情况下不能执行多态性,也不能使用指针执行运算符重载。C++ c++;运营者超载及;多态性,c++,polymorphism,operator-overloading,C++,Polymorphism,Operator Overloading,多态性和运算符重载是否混合在一起? 如中所述,在没有指针的情况下不能执行多态性,也不能使用指针执行运算符重载。 所以真的没有办法做到这一点,对吗?简而言之: 运算符重载是一种静态多态性 静态多态性可以使用函数重载、运算符重载和templates来实现 我认为您只考虑动态多态性(virtualstuff)。 另一方面,通常我们看不到重载运算符的virtual函数,但从理论上讲它仍然是可能的 更正:运行时(动态)多态性可以使用指针和引用来完成。是的。你没有正确阅读答案 下面是一个简短的演示: #in
所以真的没有办法做到这一点,对吗?简而言之: 运算符重载是一种静态多态性 静态多态性可以使用函数重载、运算符重载和
template
s来实现
我认为您只考虑动态多态性(virtual
stuff)。另一方面,通常我们看不到重载运算符的
virtual
函数,但从理论上讲它仍然是可能的
更正:运行时(动态)多态性可以使用指针和引用来完成。是的。你没有正确阅读答案 下面是一个简短的演示:
#include <iostream>
using namespace std;
struct X
{
int value;
virtual void operator += (int x)
{
value += x;
}
};
struct Y : X
{
virtual void operator += (int x)
{
value *= x;
}
};
void do_stuff(X& x)
{
x += 10;
cout << "Final value " << x.value << endl;
}
int main()
{
X x;
x.value = 10;
Y y;
y.value = 10;
do_stuff(x);
do_stuff(y);
return 0;
}
#包括
使用名称空间std;
结构X
{
int值;
虚空运算符+=(int x)
{
值+=x;
}
};
结构Y:X
{
虚空运算符+=(int x)
{
值*=x;
}
};
无效do_材料(X&X)
{
x+=10;
首先,多态性同时适用于引用和指针
运算符重载与引用一起工作。因此在
这个水平
二进制运算符存在潜在问题。直接语言
对运算符多态性的支持仅在左侧有效
操作数。其中,对于二进制+
之类的东西,逻辑上是
期望双重分派。虽然这可以实现,但有点困难
更复杂,尤其是在层次结构是开放的情况下
对于像binary+
这样通常返回新对象的操作符,有
这也是返回类型的问题。通常,这不能是
引用,因为没有具有适当类型的对象可引用
像信封这样的习惯用法已经被开发出来用来处理
但它们并不一定简单,而且它们通常都非常简单
显著的运行时开销。或者重载运算符返回
特殊类型,它只保存其参数,并且知道如何计算
请求时使用正确类型的值