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有整个关于赋值运算符的章节,只是为了澄清一下。