C++语法基础--恢复继承成员的访问级别,默认继承保护级别,友元关系与继承,继承与静态成员

1.恢复继承成员的访问级别(using 声明)
 *派生类可以恢复继承成员的访问级别,但是不能使访问级别比基类中原来指定的更严格或更宽松
 
Example:
  class base
  {
      public:
   int x;
   
  };
  
   class private_derived:private base   
   {
    public:
     
 using base::x;
    
   };


 int main()
 {
  private_derived pd;
  pd.x=1;// 如果去除using base::x,则出错: 'int base::x' is inaccessible 
  cout<<pd.x<<endl;//1
 }




2.默认继承保护级别
  *class保留字定义的派生类默认具有private继承
  *struct保留字定义的派生类默认具有public继承
 
 Example:
    
  class base
  {
 
  };
  
   class private_derived: base   
   {
   
   };

  
 等效于
  class private_derived: private base   
   {
   
   }; 


3.友元关系与继承
  *友元关系不能继承,基类的友元对派生类的成员没有特殊访问权限
   Example:
   class base
  {
    friend class frd;
    public:
    base(int i):x(i)
    {
    }
    private:
    int x;
 
  };
  
   class derived: public base   
   {
    public:
       derived(int j):base(j)
   {

            } 
     private:
    int y;
   };


  class frd   
   {
    public:
    void fun1(base b)
    {
    cout<<"base:: "<<b.x<<endl; 
    }
    void fun2(derived d)
    {
    //cout<<"derived:: "<<d.y<<endl;//error, 'int derived::y' is private
    }
   }; 
 int main()
 {
  base b(1);
  derived d(2);
  frd f;
  f.fun1(b);//base:: 1
    
    return 0;
 }


4.继承与静态成员
  *如果基类定义了static成员,则整个继承层次中只有一个这样的成员
  *static成员遵循常规访问控制


 Example:
  class base
  {
    
    public:
    static void fun()
    {
    cout<<"static base::fun()"<<endl;
    }
 
  };
  
   class derived: public base   
   {
     
   };


  
 int main()
 {
 
  derived d;
  derived *pd=new derived;
  derived::fun();
//static base::fun()
  d.fun();//static base::fun()
  pd->fun();//static base::fun()
    
    return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值