知识点:
1、通过继承可以自动地为一个类提供来自另一个类的成员函数和数据成员。
2、派生类的声明必须遵循3个原则
1)C++允许从一个类或多个类中派生一个类出来,派生类继承基类的所有成员;
2)派生类可以改变继承过来的成员的访问权限,方法是在基类的声明前加上存取说明符
3)合法的存取说明符是public、protected和private。
3、私有派生、保护派生与共有派生
3.1私有派生
通过私有派生,派生类从基类继承来的共有成员与保护成员都将变为派生类的私有成员,这些成员只能被派生类的成员函数和友元函数访问,需要重点说明的是,基类的私有成员经过私有派生后继续保持其基类的私有成员身份,无法被派生类访问。
class rectangle:private line // 声明一个私有派生类
{};
3.2保护派生
由保护派生得到的派生类,它从基类继承的共有和保护成员都将变为派生类的保护成员。基类的私有成员经过保护派生后继续保持其基类的私有成员身份,派生类依然无法访问。
class rectangle:protected line // 声明一个保护派生类
{};
3.3共有派生
由共有派生得到的派生类,它从基类继承的成员都将维持原有的访问控制特征,派生类从基类继承的共有成员在派生类仍然是共有成员,保护成员仍然是保护成员,而基类的私有成员经过派生后继续保持其基类的私有成员身份,依然无法被派生类访问。
class rectangle:public line // 声明一个共有派生类
{};
示例
//基类
class line
{
private:
int length;
protected:
void setlength(int n)
{
length = n;
}
public:
int getlength(void)
{
return length;
}
};
// 私有有派生
class rectangle:private line // 声明一个私有派生类
{
int width;
public:
void setlw(int m, int n)
{
setlength(m);
width = n;
}
int area(void)
{
return length*width; // error! 派生类的成员函数不能访问基类的私有成员
}
};
注意:
不管是何种派生,基类的private成员永远都不能被其派生类直接访问,但可以通过public和protected成员函数访问。