如何重载operator =以返回指向成员的指针?

时间:2012-02-21 14:21:37

标签: c++ operator-overloading

具有以下代码(简化):

struct MyStruct {
    int member1;
    int member2;
};

class MyClass { 
    MyStruct *data;
}


MyClass obj;

// put obj.data in pstruct  
// so obj.data->element1 is the same as pstruct->element1
MyStruct *pstruct = obj;

我不想创建obj.data的副本,但返回相同的指针,因此如果我在pstruct->member1中进行更改obj.data->element1中的更改相同(反之亦然) )。

这可能吗?

由于

4 个答案:

答案 0 :(得分:7)

听起来您想要一个从MyStruct*创建MyClass的转换运算符:

class MyClass {
    MyStruct *data;
public:
    operator MyStruct*() {
       return data;
    }
};

答案 1 :(得分:2)

没问题。

MyClass obj;

MyStruct *pstruct = obj.data;

答案 2 :(得分:2)

第一件事是你不能为指针重载操作符,好的是你不需要,你只需要分配指针:

MyClass obj;
MyStruct *pstruct = obj.data; // Assuming that `data` is accessible here

如果您无权访问内部data成员,则需要提供访问权限(返回指针的成员函数--breaks encapsulation),或者使调用代码为{{1 } friend授予对内部类型的访问权限(仍然会破坏封装,只需少一点)。

答案 3 :(得分:1)

可以使用转换运算符执行您想要的操作,但我更愿意看到您编写getter method。这可以避免隐式转换的问题。

class MyClass {
private:
    MyStruct *data;
public:
    MyStruct* GetData() const { return data; }
};


int main () {
  MyClass obj;
  MyStruct *pstruct = obj.GetData();
  MyStruct *pstruct2;
  pstruct = obj.GetData();
}