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;
}