重複の可能性:
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() が継承されないため)、また func() が派生およびモードでパブリックである場合継承は公開されているのに、なぜまだ目的の結果が得られるのですか?.前のケースのようにコンパイル エラーが発生するはずですか??
私は完全に混乱しています..この場合、コンパイラがどのように機能するか教えてください..??