C++:重载操作符。好奇类型转换运算符
我知道,那个C++有运算符,那我的应该不是过载。C++:重载操作符。好奇类型转换运算符
operator'。'是这些运营商之一,我不能过载。
但是,为了最好的知识,这种重载是不好的?
我认为,这是非常糟糕的。
但我不需要知道,如果我有对象或指向对象的指针。
然而,这是有趣的和危险的
class A {
public:
get_int(){ return a }
A(){ a=1 }
operator A*(){ return this }
private: int a;
};
int main(){
A a;
A* c = a;
//here, c->get_int() will return 1
}
你需要重载间接运算符->
,让通用x->foo()
语法,不论x
是一个指针或不:
T * T::operator->() { return this; }
用法:
T x, * p = &x;
p->foo(); // OK as usual
x->foo(); // also OK, weirdly
例子:
#include <cstdio>
struct Foo
{
void foo() { std::puts("Boo"); }
Foo * operator->() { return this; }
};
int main() { Foo x, * p = &x; p->foo(); x->foo(); }
- > operater不会返回一个引用,而不是一个指针吗?所以'T&T ::运营商 - >()' – 2012-08-03 12:35:58
@WoodrowDouglass:号 – 2012-08-03 12:36:42
好吧,我站在纠正。 – 2012-08-03 12:37:02
有什么问题吗? – AProgrammer 2012-08-03 12:31:54
这个重载不好吗?请为什么原因。我只看到像'object'和'pounter-to-object'这样的含义太大,并且他们的可访问性为 – gaussblurinc 2012-08-03 12:32:19
+1,因为“然而,这很有趣也很危险”,尽管我不知道你的问题是什么。 – 2012-08-03 12:33:37