問題タブ [friend-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++での継承/フレンドクラスによるメンバーアクセスの理解
C++ 入門第 5 版から:
これらのクラスを見てください:
ここで、Pal は Base のフレンド クラスですが、Sneaky は Base から継承され、Pal で使用されます。が呼び出される最後の行でs.prot_mem
、作成者はそれが機能する理由を示しています。なぜなら、Pal は Base のフレンド クラスだからです。しかし、私がこれまで読んだことは、私の理解では、s は Base から派生し、prot_mem は既に Sneaky にアクセスできるはずの Base Class の保護されたメンバーであるため、とにかく動作するはずであることがわかります。お願いします?
c++ - 名前空間をクラスのフレンドとして宣言する
friend
特定の名前空間内で定義されたすべての関数をクラスで作成する方法があるかどうか疑問に思っていましたか?
特に、次のようなクラスがあります。
および名前空間B
は次のとおりです。
B
ここで、名前空間の 5 つの関数すべてをクラスとフレンドにするために、クラス定義に 5 行を記述することは避け、名前空間内で定義されたすべての関数がクラスとフレンドであること (つまり、そのプライベートにアクセスできること)C
をコンパイラに伝えるだけにしたいと思います。メンバー)。B
C
私が推測する簡単な修正は、名前空間をクラスに変更し、関数をその静的メンバーとして定義してから、クラスを classB
のフレンドとして宣言することC
です。しかし、好奇心から、名前空間でもそのようなことが可能かどうか疑問に思っていましたか?
前もって感謝します。
c++ - コンポジションまたはフレンドクラスを使用して、他のクラスのメンバー関数に「this」クラスのメンバー関数にアクセスする
次のように「構成」を使用してクラスを作成しています-
ここで、FibonacciDynamic
、FibonacciRecursive
&FibonacciSequential
は、ヘッダー ファイルで宣言されているクラスです。ここでの主な問題は、se.fib()
, re.fib
&dy.fib()
関数を使用しているときに次のようなエラーが発生することです
error C2228: left of '.fib' must have class/struct/union
エラーを超えずにここで構成アプローチを使用する他の方法はありますか?
そうでない場合、それらをフレンド クラスとして使用し、クラスのメンバー関数でメンバー関数にアクセスすることは可能fibonacci
ですか?
ありがとう。
c++ - テンプレートのフレンド関数の特殊化を宣言する方法
テンプレートを持つ:
私は友人クラスとして operator<< を持っています:
私がやりたいことは、スペースの代わりに-
出力の要素間にある整数のその関数の特殊化を行うことです。私は試した
しかし、私がメインでコンパイルするとき
私の特殊化の代わりに、operator<< の一般的な形式が呼び出されます。あまり専門にしていなかったと思います。フレンド クラスの特殊化を宣言する方法はありますか?
WhozCraig の回答に基づく解決策
前方宣言:
クラス内の宣言:
フレンド関数の定義:
c# - C#で特定のユーザーのみに変更機能を提供するオブジェクトを作成する方法は?
C# でハーフエッジ データ構造の実装を作成しています。この構造の詳細は私の質問には関係ないので、必要なだけ深く紹介しますが、興味のある人はフリップコードで簡単な要約を入手できます。
私のデータ構造のオブジェクト指向表現は、Halfedge
、Edge
、Vertex
およびの 4 つのクラスで構成されておりFace
、相互にいくつかの相互参照が含まれています。(具体的には、すべてのハーフエッジは頂点を参照しますが、すべてのエッジ、頂点、および面はハーフエッジを参照します。) この低レベル表現の処理と維持は困難な作業であるため、その変更をコードのユーザーに公開しないでください。データ構造の一貫性を保証します。
これを実現するために、5 番目Graph
のクラスを作成して、その上に高い抽象化レベルのレイヤーを提供しました。コード/ライブラリのユーザーはGraph
、トポロジ モデルを構築またはクエリするためにインスタンスと通信するだけでよく、ハーフエッジ、エッジ、頂点、および面の低レベルの関係を処理する必要はありません。したがって、破損することはありません。
今問題に。面、頂点、エッジ、およびハーフエッジは、 からクエリ可能である必要がありGraph
ます。ハーフ エッジ データ構造には、データに関するトポロジ情報が含まれているため、たとえば、特定の面またはエッジに隣接する面を要求するのは、リソース効率の高いクエリです。これらのクラスの使用方法のサンプル:
明らかな目的のために、オブジェクトは、含まれている、、およびオブジェクトGraph
の内部状態を操作して、ユーザーからの入力からデータ構造を構築および維持する必要があります。ただし、これら 4 つのクラスに状態を変更するメソッド (またはプロパティ) がある場合、ユーザーが直接呼び出すことができるため、表現をユーザーから隠すという考え全体が台無しになります。(残念ながら、C# には現在、フレンド クラスの概念がありません。)Halfedge
Edge
Vertex
Face
public
、Halfedge
、およびクラスをネストして公開しないと、ユーザーがこれらの型を取得できなくなりますEdge
。例えば:Vertex
Face
Graph
したがって、基本的に私の質問は、このようなデータ構造を実装するためにどの設計に従うのが最善かということです。、、およびクラスHalfedge
は、クラス用に変更するためのインターフェイスを公開する必要がありますが 、他のクラス用には公開する必要はありません。アセンブリ全体に対してこれらの関数を公開するため、アクセシビリティは良くありません。Edge
Vertex
Face
Graph
Internal
.NET の多くのコレクションには読み取り専用ラッパー ( などList<T>
) があり、オブジェクトを返すときにそれらのみをユーザーに公開するため (たとえばAddFace()
)、それらの「読み取り専用」ラッパー クラスを作成しますか?
c++ - フレンドクラスから抽象クラスのプライベートメンバーにアクセスするには?
クラス B のクラス A のプライベート メンバーにアクセスする方法。クラス A のオブジェクトは抽象的であるため作成できません。それを行うにはクラスCのオブジェクトを使用する必要がありますが、どうすればよいですか?
c++ - フレンド クラスがネストされたクラスのプライベート メンバーにアクセスするにはどうすればよいですか?
次の例を検討してください。
BusInfo 構造体はプライベートであるため、コンパイルされません。デフォルトでは、フレンド クラスはネストされたクラスのプライベート メンバーにアクセスできません。その状況で私は何をすべきですか?回避策はありますか?
c++ - c++クラスには、それと友達であるクラスメンバーを含めることができますか?
Employee メンバーを含む Restaurant というクラスがあります。現在、Employee は Restaurant のフレンド クラスです。これをコンパイルしようとすると、Employee mCurrentEmployee でエラーが発生し、型指定子が欠落している - int が想定されているというエラーが表示されます。なぜコンパイラはこれに腹を立てるのですか? どうすれば修正できるかについてのアイデアはありますか?ありがとう。
-
c++ - C++:派生クラスのグループが1つのクラスのプライベートメンバーにアクセスできるようにする方法は?
クラスを仮定します: Library
そして、基本クラス LibraryCustomer からの派生クラスのグループがあります。たとえば、Kid、Parent、Student などです。
Library のクラスには、(大量の) プライベート メンバー変数のグループがあります。ライブラリのクラスにはたくさんのプライベート メンバーが存在するため、面倒な getter と setter は使用したくありません。さらに、LibraryCustomer 派生クラスは、これらのメンバーを参照することがよくあります。Getter と Setter は便利ではありません。
これらの LibraryCustomers が Library のプライベート メンバーにアクセスできるようにするには、それらの LibraryCustomers を Library のフレンド クラスとして要求する必要があります。
しかし、派生クラスは増え続けるため、クラス ライブラリにそれらを 1 つずつ追加したくありません。
Library の友人として基本クラス LibraryCustomer を追加すると機能しないようです。では、別のより良い方法は何ですか?
【追記】Libraryのクラスでたくさんのprivateメンバー変数にアクセスしたいです。ゲッター、セッターは多いので使いたくない。LibraryCustomer から派生したクラスが、Library のクラスのプライベート メンバー変数に自由にアクセスできることを願っています。