类的继承与派生
类的继承,是新的类从已有类那里得到已有的特性。从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生。
原有的类称为基类或父类,产生的新类称为派生类或子类。 一个派生类可以同时有多个基类,这种情况就称为多继承;一个派生类只有一个直接基类的情况,称为单继承。
在派生的过程中 ,派生出来的新类也同样可以作为基类再继续派生新的类,此外,一个基类可以派生出多个派生类。在类族中,直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层的基类称为间接基类。
派生类成员是指除了从基类继承来的所有成员之外,新增加的书据和函数成员。
派生新类的过程实际上经历了3个步骤:吸收基类成员、改造基类成员、添加新的成员。
1.吸收基类成员:派生类实际上就包含了它的全部基类中除构造和析构函数之外的所有成员。即在派生过程中,构造函数和析构函数都不被继承。
2.改造基类成员:包括两个方面,(1)基类成员的访问控制问题,主要依靠派生类定义时的继承方式来控制(2)基类数据或函数成员的覆盖或隐藏。如果派生类声明了一个和某基类成员同名的新成员(如果是成员函数,则参数表也要相同,参数不同的情况属于重载),派生的新成员就隐藏了外层同名成员。这时在派生类中或者通过派生类的对象,直接使用成员名就只能访问到派生类中声明的同名成员,这称作同名隐藏。
3.添加新的成员:派生类新成员的加入是继承与派生机制的核心,是保证派生类在功能上有所发展的关键。由于在派生过程中,基类的构造函数和析构函数不能被继承,因此实现一些特别的初始化和扫尾清除工作,就需要在派生类中加入新的构造和析构函数。
访问控制
类的继承方式有public(公有继承)、protected(保护继承)、private(私有继承)三种。不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里的访问来自两个方面:一是派生类中的新增成员访问从基类继承的成员。而是在派生类外部,通过派生类的对象访问从基类继承的成员。
(1)公有继承:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。
(2)保护继承:保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。
(3)私有继承:当类的继承方式为私有继承时,基类的公有成员和保护成员都以私有成员的身份出现在派生类中,而基类的私有成员在派生类中不可直接访问
类的继承,是新的类从已有类那里得到已有的特性。从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生。
原有的类称为基类或父类,产生的新类称为派生类或子类。 一个派生类可以同时有多个基类,这种情况就称为多继承;一个派生类只有一个直接基类的情况,称为单继承。
在派生的过程中 ,派生出来的新类也同样可以作为基类再继续派生新的类,此外,一个基类可以派生出多个派生类。在类族中,直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层的基类称为间接基类。
派生类成员是指除了从基类继承来的所有成员之外,新增加的书据和函数成员。
派生新类的过程实际上经历了3个步骤:吸收基类成员、改造基类成员、添加新的成员。
1.吸收基类成员:派生类实际上就包含了它的全部基类中除构造和析构函数之外的所有成员。即在派生过程中,构造函数和析构函数都不被继承。
2.改造基类成员:包括两个方面,(1)基类成员的访问控制问题,主要依靠派生类定义时的继承方式来控制(2)基类数据或函数成员的覆盖或隐藏。如果派生类声明了一个和某基类成员同名的新成员(如果是成员函数,则参数表也要相同,参数不同的情况属于重载),派生的新成员就隐藏了外层同名成员。这时在派生类中或者通过派生类的对象,直接使用成员名就只能访问到派生类中声明的同名成员,这称作同名隐藏。
3.添加新的成员:派生类新成员的加入是继承与派生机制的核心,是保证派生类在功能上有所发展的关键。由于在派生过程中,基类的构造函数和析构函数不能被继承,因此实现一些特别的初始化和扫尾清除工作,就需要在派生类中加入新的构造和析构函数。
访问控制
类的继承方式有public(公有继承)、protected(保护继承)、private(私有继承)三种。不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里的访问来自两个方面:一是派生类中的新增成员访问从基类继承的成员。而是在派生类外部,通过派生类的对象访问从基类继承的成员。
(1)公有继承:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。
(2)保护继承:保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。
(3)私有继承:当类的继承方式为私有继承时,基类的公有成员和保护成员都以私有成员的身份出现在派生类中,而基类的私有成员在派生类中不可直接访问