如何重载运算符=以返回指向成员的指针
How to overload operator= to return pointer to a member?
有类似以下代码(简化):
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
:创建MyStruct*
的转换运算符
class MyClass {
MyStruct *data;
public:
operator MyStruct*() {
return data;
}
};
没问题。
MyClass obj;
MyStruct *pstruct = obj.data;
第一件事是你不能为指针重载运算符,好的是你不需要,你只需要适当地分配指针:
MyClass obj;
MyStruct *pstruct = obj.data; // Assuming that `data` is accessible here
如果您没有访问内部data
成员的权限,则需要提供访问权限(返回指针的成员函数--破坏封装),或者使调用代码成为MyClass
的friend
,以授予对内部类型的访问权限(仍然破坏封装,只是稍微少一点)。
您可以使用转换运算符执行您想要的操作,但我更希望看到您编写一个getter方法。这避免了隐式转换的问题。
class MyClass {
private:
MyStruct *data;
public:
MyStruct* GetData() const { return data; }
};
int main () {
MyClass obj;
MyStruct *pstruct = obj.GetData();
MyStruct *pstruct2;
pstruct = obj.GetData();
}
相关文章:
- 从私有成员变量的成员方法返回unique_ptr
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 如何在C++中允许成员函数的自定义返回类型进行类型擦除?
- 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 在C++如何从数组中提取成员并返回成员类型的数组?
- 如何在模板类中返回成员变量的副本
- C++14 强制转换以返回成员函数的类型 - 简洁版本
- 从右值对象返回成员
- 成员函数返回成员变量的RVALUE参考
- 返回成员变量(如果存在)
- C++通过ref返回成员的方法和get-set方法之间的差异
- 使用decltype和constness的C++11尾部返回成员函数
- 返回成员变量时,为什么函数内外得到的结果不同
- 编译器是否在返回成员变量的情况下执行返回值优化
- C++:通过成员函数中的引用返回成员变量
- 返回成员变量的std::initializer_list返回不正确的值
- 返回成员变量的引用是不好的做法吗?
- 从类方法返回成员unique_ptr