【发布时间】:2012-08-09 12:35:54
【问题描述】:
我正在编写一个字符串类。我希望能够分配我的字符串,例如;
a = "foo";
printf(a);
a = "123";
printf(a);
int n = a; // notice str -> int conversion
a = 456; // notice int -> str conversion
printf(a);
我已经分配了我的 operator=() 方法用于字符串到整数的转换。如何声明另一个 operator=() 以便我可以执行反向方法?
当我声明另一个时,它似乎覆盖了之前的。
String::operator const char *() {
return cpStringBuffer;
}
String::operator const int() {
return atoi(cpStringBuffer);
}
void String::operator=(const char* s) {
ResizeBuffer(strlen(s));
strcpy(cpStringBuffer, s);
}
bool String::operator==(const char* s) {
return (strcmp(cpStringBuffer, s) != 0);
}
//void String::operator=(int n) {
// char _cBuffer[33];
// char* s = itoa(n, _cBuffer, 10);
// ResizeBuffer(strlen(_cBuffer));
// strcpy(cpStringBuffer, _cBuffer);
//}
【问题讨论】:
-
注意:这个“str -> int 转换”和相反,可能不会像你想象的那样做。
-
这不是家庭作业。我受到启发制作了一个模仿函数式语言字符串的 String 类,因为我厌倦了自己进行转换。
-
我看不出自动转换与函数式语言有什么关系(当你尝试这样的事情时,Haskell 会尖叫你。)为什么要自己进行转换?有转换功能。
-
@kvanberendonck 是否模仿 功能性 语言?实际上它模仿具有动态类型系统的语言(如果这是您需要的,那么您应该考虑使用另一种语言而不是 C++,因为通常类型安全是他这样做的理由)。
-
@Alderath:它可以通过提供隐式转换来完成,并且在问题中具有当在
int的上下文中使用String时,将调用上面定义的operator int()是必需的(这里是挥手),但在许多可能不需要它的情况下也是如此(其中int可以使用)
标签: c++ operators implicit-conversion conversion-operator explicit-conversion