継承に関する典型的な問題[重複
-
01-10-2019 - |
質問
可能な複製:
なぜこれが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;
所属していません StackOverflow