通过引用另一个类方法传递向量成员变量

passing a vector member variable by reference to another class method

本文关键字:向量 成员 变量 类方法 引用 另一个      更新时间:2023-10-16

注意:我在问题中使用伪代码

比方说,我有一个名为circle的类,它的接口名为圆形.h我还有一个名为readdata的方法,但它是在另一个中定义的类称为矩形(矩形.h是接口)我想调用circle类中的方法readdata,并传入私有成员变量,它是一个向量。如何做到这一点?是吗更正为通过引用传入PRIVATE成员变量去另一个班。这不是违背了拥有私有成员变量,因为现在我给类矩形访问circle类向量变量,因为我通过引用传入了它。以下是我的感受do-it(伪码)

circle.h
private:
vector<struct> vect;
public:
dataread()
circle.cpp
rectangle.h
readdata(vector &)


method dataread() //class method to fill up my struct
{
 rectangle::readdata(vect);   //i call rectangle readdata method but i
 pass in a reference to my memebr variable....is this safe?
}

我应该只在本地声明向量吗(在dataread方法中)将其分配给引用?任何帮助都将不胜感激。现在它正在编译,但我被告知这不好编程实践

将对私有成员的引用传递给其他类中的方法没有错。例如:

void myClass::myMethod() {
    std::copy(myVector1.begin(), myVector1.end(), myVector2.begin());
}

虽然这并没有直接传递对myVector1的引用,但它确实传递了一个可写迭代器,这几乎是一样的。该类正在请求某个对象/函数对其数据执行某些操作。只要其他对象/函数只做它应该做的事情,就没有问题。

我想我明白你的要求了。是的,你可以传递对私有数据的引用,而不是,你不应该这样做。你可以传递一个const引用,这样它就不会被修改,或者传递一个复制了内容的新向量。最好的办法是弄清楚为什么你需要这样做,然后找出获得数据的最佳方法。

传递指向"专用内存区域"的指针并不一定违反封装思想,因为拥有该内存区域的对象决定允许访问谁。它不允许"任何人访问它"。另一方面,这看起来不太自然。

您应该从readdata方法返回一个指针,并在您的circle实例中使用它。同时,这样做打破了我个人使用的一个原则:分配内存的人对内存负责,所以它也应该是在适当的时候释放内存的人。考虑到这一点,返回实际向量而不是指向它的指针可能是个好主意(但这意味着复制大量内存,以防您没有使用带有"返回值优化"的编译器)。