1

注:質問では擬似コードを使用します

たとえば、circle.hというインターフェイスを持つcircleというクラスがあり、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

プライベートメンバーへの参照を他のクラスのメソッドに渡すことには何の問題もありません。例えば:

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

これはmyVector1への参照を直接渡しませんが、ほぼ同じことである書き込み可能なイテレータを渡します。クラスは、そのデータを使用して何かを実行するために、オブジェクト/関数を要求しています。他のオブジェクト/関数が本来の機能のみを実行する限り、問題はありません。

于 2012-07-27T20:26:13.057 に答える
0

私はあなたが求めているものを手に入れると思います。はい、あなたはあなたの個人データへの参照を渡すことができます、そしていいえ、あなたはそれをするべきではありません。const参照を渡して変更できないようにするか、コンテンツがコピーされた新しいベクトルを渡すことができます。理解するための最良のことは、なぜそれをそのようにする必要があるのか​​、そしてそこにデータを取得するための最良の方法を理解することです。

于 2012-07-27T20:18:45.913 に答える
0

「プライベートメモリ領域」へのポインタを渡すことは、そのメモリ領域を所有するオブジェクトが誰にアクセスを許可するかを決定するため、必ずしもカプセル化の考えに反するわけではありません。「誰でもアクセス」することはできません。一方、これはあまり自然に見えません。

readdataメソッドからポインタを返し、それをサークルインスタンスで使用する必要があります。同時に、これを行うと、私が個人的に使用する原則が破られます。メモリを割り当てる人が責任を負うため、必要に応じてメモリを解放する人でもある必要があります。これを考慮に入れると、ポインタではなく実際のベクトルを返すことをお勧めします(ただし、「戻り値の最適化」を備えたコンパイラを使用していない場合は、大量のメモリをコピーすることを意味します)。

于 2012-07-27T20:21:05.527 に答える