C++ 如何重载运算符=以返回指向成员的指针?
简化如下代码:C++ 如何重载运算符=以返回指向成员的指针?,c++,operator-overloading,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.dat
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中的更改是相同的,反之亦然
这可能吗
谢谢,没问题
MyClass obj;
MyStruct *pstruct = obj.data;
没问题
MyClass obj;
MyStruct *pstruct = obj.data;
听起来您需要一个转换运算符从MyClass创建MyStruct*:
听起来您需要一个转换运算符从MyClass创建MyStruct*:
首先,您不能为指针重载运算符,好的是您不需要重载,您只需要适当地分配指针:
MyClass obj;
MyStruct *pstruct = obj.data; // Assuming that `data` is accessible here
如果您没有访问内部数据成员的权限,则需要提供一个返回指针中断封装的成员函数,或者使调用代码成为MyClass的朋友,以授予对内部类型仍然中断封装的访问权限,少一点。第一件事是不能重载指针的运算符,好的是不需要重载,只需要适当地分配指针:
MyClass obj;
MyStruct *pstruct = obj.data; // Assuming that `data` is accessible here
如果您没有访问内部数据成员的权限,则需要提供一个返回指针中断封装的成员函数,或者使调用代码成为MyClass的朋友,以授予对内部类型仍然中断封装的访问权限,只是稍微少一点。您可以使用转换运算符执行您想要的操作,但我更愿意看到你写一篇文章。这避免了隐式转换的问题
class MyClass {
private:
MyStruct *data;
public:
MyStruct* GetData() const { return data; }
};
int main () {
MyClass obj;
MyStruct *pstruct = obj.GetData();
MyStruct *pstruct2;
pstruct = obj.GetData();
}
你可以用一个转换操作符做你想做的,但是我更愿意看到你写一个。这避免了隐式转换的问题
class MyClass {
private:
MyStruct *data;
public:
MyStruct* GetData() const { return data; }
};
int main () {
MyClass obj;
MyStruct *pstruct = obj.GetData();
MyStruct *pstruct2;
pstruct = obj.GetData();
}
我会尽可能避免向类型添加转换。隐式转换在您需要时(如问题中所述)起作用,但在您不需要时也起作用,打开代码以允许代码中出现愚蠢的错误。突然,如果obj是有效的,就像obj+5一样,这是两个您可能不想要的操作,现在将被允许。大卫:我同意,但从这个问题上很难判断OP真正想要达到什么目的。就是这样!非常感谢你!我会尽可能避免向类型添加转换。隐式转换在您需要时(如问题中所述)起作用,但在您不需要时也起作用,打开代码以允许代码中出现愚蠢的错误。突然,如果obj是有效的,就像obj+5一样,这是两个您可能不想要的操作,现在将被允许。大卫:我同意,但从这个问题上很难判断OP真正想要达到什么目的。就是这样!非常感谢你!请注意,您的示例从不调用运算符=。对象初始化不同于对象分配。请注意,您的示例从不调用运算符=。对象初始化不同于对象分配。