我目前正在尝试将一些使用原始类型的代码重构为可以将setter和getter包含在其中的东西。我想让对底层代码的修改变得透明,起初我虽然C ++的运算符重载会帮助我。
假设我想制作一个"增强int
"例如,类型可以像常规int
一样处理,但允许在我分配给它的任何地方进行进一步操作,只允许分配 - int
的所有其他属性,例如添加{ {1}},应该保留。
首先,我首先考虑到如果我将+=
封装在某个结构中,并填写了int
重载,我将被设置,如下例所示:
operator=
代码按预期编译并运行,但是一旦我尝试使用常规int可以执行其他操作,例如#include<iostream>
typedef struct PowerInt{
int x;
PowerInt(){
cout << "PowerInt created\n";
x = 0;
}
~PowerInt(){
cout << "PowerInt destroyed\n";
}
void operator=(int other){
cout << "PowerInt received " << other << "\n";
this->x = other;
}
}PowerInt;
int main(){
PowerInt a;
a = 3;
return 0;
}
或cout << a
,或者甚至是简单的a += 2
赋值编译器抱怨缺少运算符int b = a;
和<<
。
足够公平;然后我,至少对+=
和&#34;分配<<
&#34;,我可以使用某种&#34;通用右值运算符&#34;或者某些在=
被用作右值的任何地方返回PowerInt.x
的方法,自动使a
和int c = (a + 3);
等表达式有效。
问题是,我无法找到实现这个习惯用法的方法,这很可能与我对C ++中运算符重载如何工作的一点理解有关,或者某些语言特征我不是但意识到。是否有可能完成我在这里尝试的事情?
答案 0 :(得分:0)
如果您希望operator int() const
{
return x;
}
可转换为正常PowerInt
,则可以创建用户定义的转换运算符:
int
任何未为typedef struct
定义的运算符都将使用为正常UPDATE table_name SET A = B, B = A;
定义的运算符。
P.S {+ 1}}在C ++中是不必要的。