C++ C++;重载=运算符的包装器
我正在尝试围绕int开发一个非常简单的(目前)包装器类,并希望通过重载=运算符来实现如下功能:C++ C++;重载=运算符的包装器,c++,operator-overloading,accessor,C++,Operator Overloading,Accessor,我正在尝试围绕int开发一个非常简单的(目前)包装器类,并希望通过重载=运算符来实现如下功能: class IntWrapper { ... private: int val; } int main ( ) { IntWrapper a; int b; a = 5; // uses overloaded = to implement setter b = a; // uses overloaded = to implement
class IntWrapper
{
...
private:
int val;
}
int main ( )
{
IntWrapper a;
int b;
a = 5; // uses overloaded = to implement setter
b = a; // uses overloaded = to implement getter
}
然而,我认为这是不可能做到的。实现setter非常简单,例如:
class IntWrapper
{
...
IntWrapper& operator = (int rhs) { this.val = rhs; return *this; }
...
}
然而,通过谷歌搜索,我发现没有办法用这种方式来做getter。我的理解是,这是因为=运算符只能被重写以将赋值给一个变量,而int是一个基本类型,因此我们不能重写它的默认实现=。这是正确的吗?如果没有,我该如何编写getter
如果这是正确的,有人对类似的东西有什么优雅的建议吗?我能找到的最接近的方法是重载转换运算符:
class IntWrapper
{
...
operator int( ) { return this.val; }
...
}
int main ( )
{
...
b = (int) a;
...
}
但对我来说,这似乎毫无意义,因为它几乎没有比一个简单的getVal()方法好多少
谢谢你的建议 调用转换函数不需要强制转换。平原
b = a;
我也会调用它。这样,我就可以看出它比getVal
函数使用起来更方便。虽然我通常不使用转换函数。我更喜欢显式的getVal
函数。特别是考虑这一项
struct W {
W(int);
operator int();
};
int main() {
W w = 42;
int a = true ? 0 : w; // Ambiguity! What conversion direction?
}
它很快就会失控…您不需要强制转换来调用转换函数。平原
b = a;
我也会调用它。这样,我就可以看出它比getVal
函数使用起来更方便。虽然我通常不使用转换函数。我更喜欢显式的getVal
函数。特别是考虑这一项
struct W {
W(int);
operator int();
};
int main() {
W w = 42;
int a = true ? 0 : w; // Ambiguity! What conversion direction?
}
它很快就失去了控制…你建议的是一种方式,我一直在使用它。您不需要将a转换为int。编译器足够聪明,可以看到b是int,它会自动为您调用运算符int cast运算符。您建议的是方法,我一直在使用它。您不需要将a强制转换为int。编译器足够聪明,可以看到b是int,它会自动为您调用运算符int cast运算符