2016-05-21 11 views
0
class A{ 
fct1(){}; 
}; 

class B:public A{ 
fct2(){}; 
}; 
// B b; 
// A* a = &b; good! possible!! 

class A{ 
fct1(){}; 
}; 
class B:protected A{ 
fct2(){}; 
}; 
//B b; 
// A* a=&b; error! 

なぜですか?基本型ポインタが派生クラスオブジェクトのアドレス値を取得できないのはなぜですか?

保護された継承とポインタとは何が関係していますか?

保護された継承によってパブリックエリアが保護されたエリアに変更され、派生したクラスだけがそのメンバーの関数と変数にアクセスできることがわかりました。 :(

原理とその理由を教えてください。アクセス制御

答えて

0

全体のポイントは、することです...クラスの部分へのアクセスを取得制御。「保護」のみ派生クラスを持っていることを意味しアクセス

基本クラスのアクセスレベルによって基本サブオブジェクトへのアクセスが決まります。これをまとめると、派生クラスのみが保護された基本サブオブジェクトにアクセスできることを意味します。&bからAへのポインタへの変換は許可されませんAから派生した外部クラス。

+0

それでは、保護された継承で多型を構築できませんか? –

+0

とサブオブジェクトは、クラスでfct1のようなものを意味しますか?私は韓国語でC++を学びました:P –

+0

"Polymorphism"は危険な曖昧な言葉です。通常、「動的多型」(または「仮想関数多型」)は** public **継承を指します。その多型の解釈では、 'B' *を' A'であるかのように扱いたいので、基本サブオブジェクトは公開でなければなりません。 –

関連する問題