C++:重载"pointer to object" * 运算符

C++: overloading "pointer to object" * operator

本文关键字:object 运算符 to pointer 重载 C++      更新时间:2023-10-16

我对默认操作符定义(由编译器)有一些误解。

我有小班:

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),您将看到。