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

时间:2012-07-27 20:07:31

标签: c++ reference

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

假设我有一个名为circle的类,其接口名为 circle.h哪个 我也有一个名为readdata的方法,但这是在另一个方法中定义的 类称为矩形(rectangle.h是接口) 我想在我的圈子类中调用readdata方法并传入我的 私有成员变量,它是一个向量。如何才能做到这一点?是吗 更正通过引用传递PRIVATE成员变量 去另一个班级。这不是打败了拥有的全部目的 私有成员变量因为现在我给了类矩形 访问circle类向量变量,因为我通过引用传递它。这是我的方式 做它(伪代码)

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方法中)和 将它分配给参考?任何帮助将不胜感激。 现在它编译,但我被告知这是不好的 编程实践

3 个答案:

答案 0 :(得分:1)

将私有成员的引用传递给其他类中的方法没有任何问题。例如:

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

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

答案 1 :(得分:0)

我想我得到了你的要求。是的,您可以传递对您的私人数据的引用,不,您不应该这样做。您可以传递const引用,以便无法修改它或传递复制内容的新向量。最好的办法是你需要这样做,然后找出获取数据的最佳方法。

答案 2 :(得分:0)

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

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