继承

继承
public 派生被称为类型继承(type inheritance),反映了一种(is-a) "是一种"关系。
private 派生被称为实现继承(implementation inheritance ),基类非private成员在派生类中都是private,供派生类使用。(基类的private在派生类中无法访问)
class  A
{
public:
    
void fun(){cout<<"A::fun"<<endl;}
}
;

// private inheritance
class  B:  private  A
{
public:
    
void use_fun(){fun();}
}
;

// protected inheritance
class  C:  protected  A
{

}
;

class  D:  public  C
{
public:
    
void use_fun(){fun();}
}
;


int  main()
{
    B b;
    
//A*p = &b;        //can not assign, B is not A
    
//b.fun();        //error, A::fun is private in B
    b.use_fun();

    C c;
    
//A *p = &c;    //can not assign, C is not A
    
//c.fun();        //error A::fun is protected in C

    D d;
    d.use_fun();
    
return 0;
}


免除:
通过使用关键字using, 可以使基类成员免除私有继承的影响。
class  A
{
public:
    
void fun(){cout<<"A::fun"<<endl;}
}
;

// private inheritance
class  B:  private  A
{
public:
    
void use_fun(){fun();}
    
using A::fun;        //exempting
}
;

    B b;
    b.fun();        
// ok

你可能感兴趣的:(继承)