Why can't base type pointer take derived class object's adress value?
<pre><code>class A{
fct1(){}; 
};

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

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

<p>why is that?</p>

<p>What does protected inheritance have to do with pointer?</p>

<p>I learned that protected inheritance changes public area to protected area, so that only derived class can access its member functions and variables. :(</p>

<p>Please explain the principle and reason.</p>