注意:我在我的问题中使用伪代码
假设我有一个名为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方法中)和 将它分配给参考?任何帮助将不胜感激。 现在它编译,但我被告知这是不好的 编程实践
答案 0 :(得分:1)
将私有成员的引用传递给其他类中的方法没有任何问题。例如:
void myClass::myMethod() {
std::copy(myVector1.begin(), myVector1.end(), myVector2.begin());
}
虽然它没有直接传递对myVector1的引用,但它确实传递了一个可写的迭代器,它几乎是一样的。该类正在请求某些对象/函数对其数据执行某些操作。只要其他对象/功能只执行它应该做的事情,就没有问题。
答案 1 :(得分:0)
我想我得到了你的要求。是的,您可以传递对您的私人数据的引用,不,您不应该这样做。您可以传递const引用,以便无法修改它或传递复制内容的新向量。最好的办法是你需要这样做,然后找出获取数据的最佳方法。
答案 2 :(得分:0)
将指针传递给“私有内存区域”不一定违反封装思想,因为拥有该内存区域的对象决定允许访问的对象。它不允许“任何人访问它”。另一方面,这看起来并不自然。
您应该从readdata方法返回一个指针并在您的circle实例中使用它。 同时这样做打破了我个人使用的原则:分配内存的人负责它所以它也应该是适当时释放它的人。考虑到这一点,返回实际向量而不是指向它的指针可能是一个好主意(但这意味着如果你没有使用带有“返回值优化”的编译器,则复制大量内存)。