gpt4 book ai didi

c++ - 具有引用类成员的赋值运算符

转载 作者:IT老高 更新时间:2023-10-28 22:26:23 28 4
gpt4 key购买 nike

只要我之前的问题中出现新问题 Overloaded assignment operator causes warning about recursion ,我被合理地敦促将其发布为新的。我的 Player 类中有一个引用类成员,我想实现这个类的复制构造函数和赋值运算符 (=)。我不得不提一下,目的是函数 vector.erase 的正常工作,因为没有它就我而言它不能正常工作。我使用了一个 vector :vector allPlayers; Player 类的成员是:

class Player
{

private:
int ID;
int pMoney;
int doubleIndicator;
int squarePosition;
Bank& bank;
string pName;
Square* capturedSquare;
multimap<string, PropertySquare*> squaresColBought;
multimap<string, House*> housesColBuilt;

}

如果我想实现赋值运算符,是否必须避免使用引用作为类成员? map 成员呢?我应该如何最终实现赋值运算符?

另一个我不知道的最重要的问题是,当我删除包含播放器的 vector 的迭代器时,指针类成员指向的对象会发生什么。有什么帮助吗?

最佳答案

C++“引用”只能被初始化,不能被赋值:

int value1(1), value2(2);
int& ref1 = value1; // OK
int& ref2; // compile error: reference not initialized
int& ref3=ref1; // OK: ref3 refers to the same variable as ref1
ref1=value2; // equivalent to 'value1=value2'.

因此,包含引用的对象也只能被初始化!

确实如此:如果您需要对一个类进行赋值,则该类不能有引用成员变量。 (其实可以,但是赋值不能让这些成员指向另一个位置)

当你想到这一点时,它是有道理的:

引用概念为另一个变量定义了“别名”。别名意味着您对引用所做的任何事情,实际上都是对引用位置所做的。当您将分配应用到此别名时,实际上您分配到了引用的位置。如果您能够使用赋值使其指向不同的位置,那么引用的目的就会丢失。

如果你需要后者,你应该使用指针。

关于c++ - 具有引用类成员的赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com