Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;运营者超载及;多态性_C++_Polymorphism_Operator Overloading - Fatal编程技术网

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
+
这样通常返回新对象的操作符,有 这也是返回类型的问题。通常,这不能是 引用,因为没有具有适当类型的对象可引用 像信封这样的习惯用法已经被开发出来用来处理 但它们并不一定简单,而且它们通常都非常简单 显著的运行时开销。或者重载运算符返回 特殊类型,它只保存其参数,并且知道如何计算 请求时使用正确类型的值