問題タブ [private-inheritance]
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++ - アクセスできないベースのメンバー関数へのポインター
次の例のコンパイル:
次のエラーで失敗します:
AはBのアクセス可能なベースではないことを理解していますが、using
キーワードを使用しています。関数fooへのアクセスを許可するべきではありませんか?
上記のコンパイルを妨げる規格の関連する段落は何ですか?
c# - プライベート継承(別名C ++)をC#で使用する方法とC#に存在しない理由
プライベート継承はC++でサポートされており、パブリック継承のみがC#でサポートされていることを知っています。また、プライベート継承は通常、クラス間のHAS-A関係と一種の集約関係を定義するという記事に出くわしました。
編集:プライベート継承のC ++コード:「Carhas-a Engine」の関係は、プライベート継承を使用して表現することもできます。
さて、私が知りたいことの1つであるC#クラス間のHAS-A関係を作成する方法はありますか?
もう1つの興味深い質問は、C#がプライベート(および保護された)継承をサポートしないのはなぜですか?-複数の実装の継承をサポートすることは、正当な理由またはその他の理由ではありませんか?
プライベート(および保護された)継承は、C#の将来のバージョンで計画されていますか?
C#でプライベート(および保護された)継承をサポートすることで、C#はより優れた、広く使用されている言語になりますか?
c++ - C ++でプライベート継承を使用しているときにオーバーロードされたメソッドを非表示にすることは可能ですか?
具象クラス「Bar」でfn(int)を非表示にすることが可能です
c++ - プライベート継承とは何ですか、そしてそれはどのような問題に対処しますか?
誰かがC++のプライベート/保護された継承が何のためにあるのか、そしてそれがどのような問題を解決することを意図しているのか説明できますか?
私はすでにこの質問を見ましたが、それが何であるかはまだわかりません。ましてや、いつ使用すべきかは言うまでもありません。
(Java / C#または同様の言語の機能との比較も役立つ可能性があります。)
c++ - プライベート継承と封じ込め
封じ込めの代わりにプライベート継承を使用する必要がある場合を説明する一方で、この記事の作成者は次のように述べています。
「別のベースサブオブジェクトの前に使用済みオブジェクトを作成するか、後で破棄する必要があります。オブジェクトの存続期間が少し長いことが重要な場合は、継承を使用する以外に取得する方法はありません。」
サブオブジェクトAをサブオブジェクトBの前に構築し、Bの後に破棄する場合、囲んでいるクラスでAをBの前に宣言するだけでは不十分ですか?言い換えれば、この場合、なぜ封じ込めを使用して同じ結果を達成できないのでしょうか。
c++ - 合成と比較して、プライベート継承が誰かが私のコードを壊す可能性を高めるのはなぜですか?
この記事の著者は次のように述べています。
「通常、あまりにも多くの他のクラスの内部にアクセスしたくはありません。プライベート継承は、この余分な力 (および責任) の一部を提供します。しかし、プライベート継承は悪ではありません。維持するのにコストがかかるだけです。誰かが何かを変更してあなたのコードを壊す可能性が高くなります。」
privatelyCar
から継承する次のコードを想定します。Engine
私の質問は次のとおりです。Car
たとえば、Engine
4 シリンダー未満で、プライベート継承を使用し、基本クラスで保護されたメンバーを使用せずに、このコードをどのように壊すことができますか?
c++ - プライベート継承を含むC++コンパイラエラー
誰かが私に次のコンパイラエラーを説明してもらえますか?
示された行のエラーは次のとおりです。
アクセスできないのは正確には何ですか、またその理由は何ですか?
c++ - 親メンバーをプライベート継承で呼び出すにはどうすればよいですか?
GoFによるデザインパターンに関する本を読んでいます-オンラインリンク。
この本のアダプタパターンのサンプルコードセクションで、私はこの特定のコードに出くわしました。
このクラスTextView
は、以下のようにプライベートに継承さTextShape
れます。
次に、このvoid TextShape::BoundingBox
関数で次のようになります。
ご覧のとおり、関数GetExtent
&GetOrigin
はTextShapeと呼ばれますが、TextView
これらを含むクラスはプライベートに継承されています。
私の理解では、私的継承では、すべてのparent class
メンバーがアクセスできなくなります。では、この(void TextShape::BoundingBox()
)関数はどのようにアクセスしようとしているのでしょうか。
アップデート:
答えてくれてありがとう、私は私的継承について読んでいるときに間違った考えに陥っていました。私は、それはどのメンバーにもアクセスを妨げるだろうと感じましたが、実際にはアクセス指定子を変更し、アクセシビリティを変更しません。明確にしていただきありがとうございます:)
c++ - vc++10のテンプレートプライベート継承にアクセスできません
次のコードは、GCC4.4.6およびComeau4.3.10を使用してコンパイルされます。
VC++10では次のエラーが発生します。
これを可能にする優れたクロスコンパイラの回避策はo.name = 0;
何ですか?
注:using A::name
toを追加するとB
問題は解決しますが、メンバーはすべてのユーザーに公開されA::name
ますが、特定のテンプレートのインスタンス化、つまり。にのみ表示される必要がありますC<B>
。