我有一个包含一些常量成员的类,我想实现operator=
但我无法为常量成员赋值。
class A {
public:
const int value;
A(int v) : value(v) {};
A& operator=(const A& a);
};
如何实施operator=
?
我可以实现复制构造函数并从operator=
调用它,这是唯一的解决方案吗?
原始类的设计者决定不支持operator=()
,您不应该尝试实现它。
但是,我怀疑您要实现它的原因是因为您在另一个类中使用它,并且您想为该类实现operator=()
。
如果这是真的,我会通过指针(或智能指针(持有A
并重新分配指针,而不是尝试在A
上调用operator=()
。
你必须决定什么样的语义对你有意义。
附录:我添加这一部分是为了解释一些我认为你可能不了解C++的事情。
从你的问题中A
。
此代码构造一个A
A a(3);
如果你有一个复制构造函数,这将调用它
A b(a);
这也会如此
A b = a;
上面的这一行不是operator=()
- 它是复制构造函数的替代语法。
现在,这就是我们使用operator=()
A a(4);
A b(5);
b = a; // <--- calls operator=()
现在,如果b
有一个需要更改的 const 成员变量,这怎么可能工作?
它不能,但是....
A a(4)
A b(5)
A* aPtr = &a;
aPtr = &b; // this is ok
因此,如果您需要引用一个A
和一个点,然后您需要稍后引用不同的A
- 使用指针(或包装器,或智能指针(
const
变量有点矛盾。它们是只读的,如果没有一些巫毒魔法和一些指针洗牌,通常无法更改。 无论如何,value
是私有的(编辑:现在protected
(,因此如果没有类中的某种公共函数,就无法更改它。只需声明为常规int
.
class A {
protected:
int value;
public:
A(int v) //public constructor
{
value = v;
}
A& operator=(const A& a) //public operator override
{
if(&a == this) //check for self assignment
return *this;
//do actual assignment
value = a.value;
return *this;
}
};