質問

可能な複製:
なぜこれがC ++で許可されていないのですか?

なぜこれがC ++で許可されていないのですか... ??

class base
{
  private:

  public:
      void func()
         {
              cout<<"base";
         }  


};

class derived : private base
{
  private:


  public:
            void func()
         {
              cout<<"derived";
              }


};

int main()
{
base * ptr;
ptr = new derived;
((derived *)ptr)->func();
return 0;
}

エラーが発生しています

**61 C:\Dev-Cpp\My Projects\pointertest.cpp `base' is an inaccessible base of `derived'** 

私の質問は、func()が定義されているので 公衆 派生クラスとステートメント((派生 *)ptr) - > func(); func()を表示しようとしています 派生..継承モードのためにアクセス可能な問題があるのはなぜですか。継承モード(プライベート)は、派生クラスに既に派生func()をすでに持っていますが、コールにどのように影響しますか?

継承モードが公開された場合、私は希望の結果を得る..しかし、func()がベース(したがって、base()が継承されないように)のプライベートであり、func()が派生およびモードで公開されている場合、継承はです 公衆 なぜ私はまだ私の希望の結果を得るのですか?前のケースのようにコンパイルエラーを取得する必要がありますか?

私は完全に混乱しています..この場合、コンパイラがどのように機能するか教えてください.. ??

役に立ちましたか?

解決

私的継承がある場合、ベースポインターが派生オブジェクトを指すことはできません。

パブリック継承はanを表現します イサ 関係。一方、私的継承はaを表します の観点から実装 関係

コンパイルエラーは、行を指します。ptr = new derived;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top