从面向对象的程序设计的观点来看,继承表达的是对象类之间的相互关系。这种关系使得某类对象可以继承另外一类对象的特征和能力。如果一类对象继承了另一类对象的特征和能力,这个类就叫做所继承类的派生类(Derived类),被继承的类就叫做基类(Base类)。继承是一个进程,通过继承,一个对象可以获得另一个对象的属性(包括函数),并可向其中加入属于自己的一些特征。
继承机制是面系对象程序设计使得代码可以复用的最重要的手段,它允许程序员在保持原有类的基础上扩展,增加功能。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
1.继承的基本概念:
继承格式:
class 派生类名 : 继承方式 基类名
{
<派生类的数据和成员函数>
};
其中:
继承方式即为继承权限,用来表示基类成员在派生类中的可见性
继承方式&访问限定符:
继承方式分为三种:public继承、protected继承、private继承
类成员访问限定符也分为三种:public(公有)、protected(保护)、private(私有)
派生类的继承访问属性:
1.以公有方式继承:
class Base
{
public:
void SetValue(int pri, int pro, int pub)
{
_pri = pri;
_pro = pro;
_pub = pub;
}
void ShowValue()
{
cout << "_pri =" << _pri << endl;
cout << "_pro =" << _pro << endl;
cout << "_pub =" << _pub << endl;
}
private:
int _pri;
protected:
int _pro;
public:
int _pub;
};
class Derived : public Base
{
public:
void SetValueD(int pri,int pro,int pub)
{
_pro = 10;//保护成员变量,派生类可以直接访问,在类外不能访问
//_pri = 20;//私有成员变量,派生类不能直接访问,在类外不能访问
SetValue(pri,pro,pub);//基类中的成员函数也继承下来了
}
private:
int _priD;
protected:
int _proD;
public:
int _pubD;
};
//判断公有继承方式下基类保护成员继承之后权限是否发生变化:再派生一层,如果继承下来是保护则下一层派生类继续可以直接访问,如果访问权限改变为私有成员,则下一层派生类不能直接访问。
class C :public Derived
{
void Funtest()
{
_pro = 10;//证明保护成员继承下来之后访问权限仍是保护
}
};
int main()
{
cout << sizeof(Derived) << endl;//说明基类成员变量已经继承下来了
Derived d;
d._pub = 10; //公有成员变量,派生类能直接访问,在类外也能访问
return 0;
}
上述代码说明:在派生类继承基类时,将基类的成员变量和成员函数都继承下来了,并且以public方式继承后,基类的public成员、protected成员以及private成员访问权限都不变。
1.以保护方式继承: