1

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

假设我有一个名为 circle 的类,带有一个名为 circle.h 的接口,我也有一个名为 readdata 的方法,但这是在另一个名为 rectangle 的类中定义的(rectangle.h 是接口)我想在我的圈子中调用方法 readdata类并传入我的私有成员变量,它是一个向量。如何才能做到这一点?通过引用另一个类来传递 PRIVATE 成员变量是否正确。这是否违背了拥有私有成员变量的全部目的,因为现在我让类矩形访问圆形类向量变量,因为我通过引用传递它。这是我的做法(伪代码)

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 方法中)并将其分配给参考吗?任何帮助将不胜感激。现在它可以编译,但有人告诉我这不是好的编程习惯

4

3 回答 3

1

There is nothing wrong with passing references to private members to methods in other classes. For example:

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

While that doesn't pass a reference to myVector1 directly, it does pass a writable iterator which is just about the same thing. The class is making a request for some object/function to do something with its data. So long as that other object/function only does what it is supposed to do, there's no problem.

于 2012-07-27T20:26:13.057 回答
0

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

于 2012-07-27T20:18:45.913 回答
0

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

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

于 2012-07-27T20:21:05.527 回答