三、继承与多态:
1.基类与派生类:
(1)继承:
面对对象程序设计中最重要的一个概念是继承。
继承允许我们根据一个类去定义另一个类,这使得创建和维护一个应用程序变得更容易。这样做也达到了代码复用功能和提高执行效率的效果。当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
(2)继承的基本语法:
class 子类 :继承方式 父类
2.继承方式:
(1)公有继承(public):
class Base
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son1 :public Base
{
public:
void func()
{
m_A;//可访问,为public权限
m_B;//可访问,为protected权限
//m_C;//不可访问
}
};
void test01()
{
Son1 s1;
s1.m_A;
//s1.m_B;//错误,protected
//s1.m_C;//错误,父类private
}
子类Son1以公共的方式继承了Base类,在其内部可以访问m_A和m_B,不能访问父类中的私有成员m_C。类外的全局函数test01()中创建了Son1的对象s1,但只能访问m_A。
(2)保护继承(protected):
class Base
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son2 :protected Base
{
public:
void func()
{
m_A;//可访问,为protected权限
m_B;//可访问,为protected权限
//m_C;//不可访问
}
};
void test02()
{
Son2 s2;
//s2.m_A;//错误,protected
//s2.m_B;//错误,protected
//s2.m_C;//错误,父类private
}
子类Son2以保护的方式继承了Base类,在其内部可以访问m_A和m_B且它们都是保护成员,不能访问父类中的私有成员m_C。类外的全局函数test01()既不能访问保护成员m_A和m_B,也不能访问m_C。
(3)私有继承(private):
class Base
{
public:
int m_A;
protected:
int m_B;
priv