• ベストアンサー

【C++】メソッドやプロパティの隠蔽

基底クラスAで、Public でメソッドXと、メソッドYが定義されているとき、 それを継承したクラスBで、何らかの方法でメソッドXと、メソッドYを隠蔽させ、 クラスBを継承したクラスCでは、メソッドXと、メソッドYが使えないようにさせることはできますか? ※Visual Studioで、クラスCの入力サポート(メンバーや、メソッドの入力候補を出してくれる機能)で、 メソッドXや、メソッドYが出ないようにしたいです。 ※同様に、メンバーに対しても、隠蔽化をしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1620/5655)
回答No.1

クラスBでprivateでオーバーライドすればいいです。

TeferiMage
質問者

お礼

おぉ! なんとスマートな! ありがとうございます!

関連するQ&A

  • 【C++】メンバ変数をポインタで宣言するデメリット

    クラスAが、メンバーとして、 クラスXと、クラスYを持っているとします。 そのようなとき、 【ケース1】  クラスAを定義する際、  メンバである、クラスX、クラスYは、ポインタで宣言させる。 【ケース2】  クラスAを定義する際、  メンバである、クラスX、クラスYは、ポインタではなく、クラスX/クラスYの型として宣言させる。 があると思いますが、それぞれどのようなデメリットがあるでしょうか? ----------------------------- 私は、ケース1は、 メリット:   クラスXを継承したクラスChild_Xや、クラスYを継承したクラスChild_Yを、   クラスAで扱えるようになる。   デメリット:   クラスXのポインタで宣言していると、クラスXを派生したクラスが格納可能であるため、   開発時に、そのメンバーに、実際にはどの型のクラスが格納されているかがわからず、   Visual Studio で追いかけられない。   (※そのメンバーに対して、右クリック⇒定義で見ても、どの型のポインタ変数かはわかっても、     どの型がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。) 私は、処理を確認する際、『どの型の値がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。』というのが、可読性は悪いわ、確認に時間が取られるわで、 非常に大きなデメリットと考えています。 このデメリットを解消する方法はあるのでしょうか?

  • C# IDisposable の必要性について

    Visual Studio 2010 を使って C# の勉強をしています。 始めたばかりで質問がおかしかったらすみません。 IDisposable を継承する意味がわかっていません。 MSDN の(http://msdn.microsoft.com/ja-jp/library/fs2xkftw.aspx) 例: 基底クラスの Dispose の実装 にて、 DisposableResourceクラスが IDisposable を継承していますが、 IDisposable を継承する意味はあるのでしょうか? IDisposable がインタフェイスというのは理解していますが、 DisposableResourceクラス の中のpublic void Dispose() は IDisposable を継承しないでも かけるのではないか?と思っています。 恐らく自分の知識が何か抜けていると思うのですが、宜しくお願いします。

  • 継承について

    みなさま、どうかお知恵を貸して下さい。 javaを勉強中で、本を読みながら試しに動かしています。 現在、実現したい動作が実現可能かどうかを調べているところです。 そのため、環境やバージョン等は決まっておりません。 むしろ、実現可能な環境やバージョンがあれば、教えてください。 実現したい機能ーーーーーーーーーーーー 親クラスAにメンバーとメソッドを定義します。 Aを継承する子クラスBを定義します。 プログラム中で、A、Bのインスタンスを生成します。 そして、A、Bを継承するCのインスタンスを生成したいのです。 Cのメンバーやメソッドは、Bと同様のものです。 この場合、BのクラスからCのようなインスタンスを作成することは、可能なのでしょうか? ・・・Cを定義していないので、おそらく不可能かと思います。 やはりこういった場合、Aを継承しているBを継承するCクラスを定義しておく必要があると考えています。 では、Cを継承するD,Dを継承するE・・・というように、いくつ必要になるかわからない場合、最大数分継承したクラスを用意すべきでしょうか。 なぜ、そうしたいかというと、組織図のようなものを作成したいのですが、組織図を構成する人数は、ユーザーの任意としたいのです。 継承したクラスを用いれば、そのまま組織図の体系を表現できる気がしました。 質問が大雑把になってしまい、申し訳ないのですが、お力を貸していただければ幸いです。

    • ベストアンサー
    • Java
  • MenuStripの継承でプロパティが反映されない

    お世話になっております。 Visual Studioを使用してプログラムを実施しております。 MenuStripクラスを継承した自作クラスAをFormに張り付けて、 自作クラスBを作成しました。 Visual Studio上で、自作クラスBを開き、自作クラスAのプロパティ「Items」を使用して メニューアイテムの設定を変更しようとしているのですが、「Items」の設定が、自作クラスB のデザイナに反映されず困っております。。。 MenuStripを継承したクラスの場合、設定されているメニューアイテムの設定は 変更できないのでしょうか。

  • Visual Studio(C#)のプログラミング

    Visual Studio(C#)のプログラミングに関する質問です。 インクルードする2ファイルが、双方のクラスを互いに必要とするケースにおいて、 コンパイルが通らなくて困っています。(当たり前なのですが…) 【Aファイル】 クラスAの定義{ クラスBの使用(インスタンス作成、メソッド利用) } 【Bファイル】 クラスBの定義{ クラスAの使用(インスタンス作成、メソッド利用) } 【全体インクルードファイル】 #include Aファイル #include Bファイル 【コンパイル結果】 Bクラスが存在しません(Aファイルにて) 【質問】 お互いにクラス定義を必要とする場合、 ★具体的に★どのような実装をすれば良いのでしょうか?

  • インターフェイス、列挙型について

    インターフェイスにclone()メソッドが無くて気づいたのですが、 インターフェイスはObjectを継承しないのですか? しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 列挙型のメンバにもclone() は無かったですけど、別のメソッドは持っていました。 列挙型や、そのメンバもスーパークラスを持っているのですか?

  • x86用Sun Studio12におけるコンパイラのバグでしょうか?

    今、x86用Solaris10にStudio12をインストールして、C++のプログラムを作ったのですが、仮想継承を定義すると正常な動作をしません。 調べたところ、どうやら基底クラスから継承している関数のポインタが基底クラスとそれを呼び出す派生クラスでずれてしまっていることが原因のようでした。 試しにsparc用Solaris10+Studio12でも同じプログラムを動作させ、調査したところ、こちらは上述の現象もなく、正常に動作しています。 これはx86用Studio12についているコンパイラのバグなのでしょうか? また、サポート契約なしに、このバグ報告をSunに行う方法がありましたら教えてください(サイト(http://jp.sun.com/)を見ましたが該当事象に対するパッチ及びバグ報告方法について記載が見つかりませんでした。 どなたかご教示いただけないでしょうか。

  • C#メソッドの引数の意味は?

    Visual Studio C# で、あるメソッドの上にカーソルがある状態でF1キーを押すと、https://docs.microsoft.comのそのメソッドのヘルプに飛びますが、そこに載っているメソッドの定義内容がよく分かりません。 例えばLINQのReverse()は以下のように定義されています。 public static System.Collections.Generic.IEnumerable<TSource> Reverse<TSource> (this System.Collections.Generic.IEnumerable<TSource> source); 始めの「public static System.Collections.Generic.IEnumerable<TSource>」の部分はOKです。 ただ、引数部分の「this System.Collections.Generic.IEnumerable<TSource> source」はどういうことでしょうか。Reverse()は引数は取らないメソッドですが・・・。 いかがでしょうか。

  • ~クラスのメソッドと言った場合継承したものを含むか

    お世話になります。 OJC-Pの勉強中、以下の模試問題が出題されました。 ------------------- Threadクラスのメソッドとして正しいものを全て選びなさい wait() notify() run() start() ------------------- 解答はrun()、start()の2つだったのですが、 この場合、Objectクラスから継承したメソッドは Threadクラスのメソッドとは言わないのかを疑問に感じました。 (外部クラスから見た場合、 継承したメソッドもThreadクラスで新しく定義されたメソッドも区別は ないのでは、と考えたためです。) 問題文の表現に不備があるのでしょうか、 それともやはり 「~クラスのメソッド」と言った場合、継承したものは含まないとするのが 一般的な解釈なのでしょうか。 また、後者の場合、それはどうしてなのか理由なども添えていただけると 嬉しいです。 よろしくおねがいいたします。

    • ベストアンサー
    • Java
  • __interfaceに定義するメソッドについて教えてください!

    __interfaceに定義するメソッドについて教えてください! 描画エンジン(engine.dll)を作成しているのですが、アプリ(App.exe)からは呼んで欲しくないメソッドをインターフェイスに定義する必要があり困っています。具体的には、以下のDrawメソッドになります。 // 形状インターフェイス[engine.dll] __interface IShape { bool Draw(); // ★CRenderクラスから呼ばれる bool SetPos( int x, int y ); }; // 描画クラス[engine.dll] class CRender { bool DrawShape( IShape* pShape ); // pShape->Draw();をする }; // アプリ[App.exe] CRender* pRender = new CRender(); IShape* pShape = new CPolygon(); pShape->SetPos(100, 100); pRender->DrawShape( pShape ); DrawメソッドはCRenderが呼ぶメソッドなので、アプリには公開しなくてもよいメソッドになっています。公開する必要がないので、隠蔽するのが正しいと思っていますが、良い案がございましたらご助言ください。

専門家に質問してみよう