简体   繁体   English

C ++:重载“对象指针” *运算符

[英]C++: overloading “pointer to object” * operator

I was some misunderstanding about default operator definition(by compiler). 我对默认的运算符定义(由编译器)有些误解。

I have small class: 我有一堂课:

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;
};

And i'm doing this whit it: 我正在做这件事:

int main()
{
    Q* obj_p = new Q(1);
    Q obj = *obj_p;
    obj.print();
    return 0;
}

I expected to see operator * , before 1 . 我期望在1之前看到operator * But I saw only print() method result. 但是我只看到print()方法的结果。

What does it mean? 这是什么意思? That I don't need to overload operator * - it's compiler work or that I do overloading somehow wrong? 我不需要重载operator * -它是编译器的工作,还是我确实以某种方式重载了?

Thanks. 谢谢。

obj_p is a pointer. obj_p是一个指针。 You have not overloaded (and cannot do it anyway) the de-reference operator for a pointer. 您尚未使指针的取消引用运算符超载(也无法做到)。 To invoke your overload, you need to act on an instance: 要调用重载,您需要对一个实例进行操作:

Q obj;
*obj;

There's no user-defined operator called - obj_p is a pointer, not an object, so the built-in dereference operator is called. 没有用户定义的运算符obj_p是指针,而不是对象,因此调用了内置的取消引用运算符。

To complete juanchopanza's answer, you can call your operator on a pointer like so: 要完成juanchopanza的答案,您可以像这样调用指针上的运算符:

Q* obj_p = new Q(1);
Q obj = obj_p->operator*();

You use your '*' operator on Q pointer but you should use on Q objects. 您在Q指针上使用了'*'运算符,但应该在Q对象上使用。 if you try *(*obj_p) you will see. 如果尝试*(* obj_p),将会看到。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM