C++ 复制/移动操作的重载赋值运算符?

C++ 复制/移动操作的重载赋值运算符?,c++,copy,move,C++,Copy,Move,我将介绍重载运算符的基本知识,特别是赋值运算符。我试图通过以下方式理解重载在指令复制和移动行为中的作用: 我发现他们举的例子很不清楚 这是迄今为止我为说明重载而编写的基本代码。如何编辑此代码以演示在自定义复制和移动行为中使用重载 class Distance { public: int feet, inches; Distance() { feet = 0; inches = 0; } Distance(int f,

我将介绍重载运算符的基本知识,特别是赋值运算符。我试图通过以下方式理解重载在指令复制和移动行为中的作用:

我发现他们举的例子很不清楚

这是迄今为止我为说明重载而编写的基本代码。如何编辑此代码以演示在自定义复制和移动行为中使用重载

class Distance
{
public:
    int feet, inches;

    Distance()
    {
        feet = 0;
        inches = 0;
    }

    Distance(int f, int i)
    {
        feet = f;
        inches = i;
    }

    auto operator=(Distance &D)->void //Use operator to perform additional operation (adding 100)
    {
        feet = D.feet + 100;
        inches = D.inches + 100;
    }
};

int main()
{
    Distance D1;
    D1.feet = 10;
    D1.inches = 12;
    Distance D2;
    D2 = D1;
    std::cout << D2.feet << std::endl;
}
类距离
{
公众:
整数英尺,英寸;
距离()
{
英尺=0;
英寸=0;
}
距离(整数f,整数i)
{
英尺=f;
英寸=i;
}
自动运算符=(距离和距离)->void//使用运算符执行附加操作(添加100)
{
英尺=D.英尺+100;
英寸=直径英寸+100;
}
};
int main()
{
距离D1;
D1.英尺=10;
D1.英寸=12;
距离D2;
D2=D1;

std::cout您不应该像那样使用赋值运算符(即使您可以).Assignment运算符和其他操作可用于计算分配的数量。以这种方式更改数据会导致界面使用过程中的混乱和人为错误。您希望代码以某种方式工作,如果是Assignment运算符,它是在复制值。只需遵循内置类型的工作方式并实现你的重载运算符就是这样的。你不会为运算符+()乘以卷,对吗?那没有任何意义

这种情况下的附加操作可能是,例如:

static int assignmentCount = 0;

auto operator=(Distance &D)->void 
   {
     feet=D.feet;
     inches=D.inches;
     std::cout << "Made assignment"; //Just some debug stuff
     assignmentCount++;              //Count assignments made
   }
static int assignmentCount=0;
自动运算符=(距离和距离)->void
{
英尺=D.英尺;
英寸=直径英寸;

std::cout即使在读过它之后,仍然不清楚吗?或者到底是什么让你担心?对于那些不理解的人,OP发表评论说,Stroupstrup有整个关于赋值运算符的章节,只是为了澄清一下。