[英]C++: overloading “pointer to object” * operator
我对默认的运算符定义(由编译器)有些误解。
我有一堂课:
class Q
{
public:
Q() {};
Q(int i) { x = i; };
~Q() {};
void print() { cout << x << endl; };
Q& operator * ()
{
cout << "operator *\n";
return *this;
};
const Q& operator * () const
{
cout << "operator *\n";
return *this;
};
private:
int x;
};
我正在做这件事:
int main()
{
Q* obj_p = new Q(1);
Q obj = *obj_p;
obj.print();
return 0;
}
我期望在1
之前看到operator *
。 但是我只看到print()
方法的结果。
这是什么意思? 我不需要重载operator *
-它是编译器的工作,还是我确实以某种方式重载了?
谢谢。
obj_p
是一个指针。 您尚未使指针的取消引用运算符超载(也无法做到)。 要调用重载,您需要对一个实例进行操作:
Q obj;
*obj;
没有用户定义的运算符obj_p
是指针,而不是对象,因此调用了内置的取消引用运算符。
要完成juanchopanza的答案,您可以像这样调用指针上的运算符:
Q* obj_p = new Q(1);
Q obj = obj_p->operator*();
您在Q指针上使用了'*'运算符,但应该在Q对象上使用。 如果尝试*(* obj_p),将会看到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.