学习完继承之后,我们进行了虚函数与多态部分的学习。
多态性是指一个名字,多种语义;或界面相同,多种实现。重载函数时多态性的一种简单形式。虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。
虚函数:
1.冠以关键字virtual的成员函数称为虚函数;实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本。
class Second_d : public First_d
{ public :
Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) { z = zz; }
void who() { cout << "Second derived class: "<< x << ", " << y << ", " << z << "\n" ; }
protected: char z;
} ;
int main()
{ Base B_obj( 'A' ) ; First_d F_obj( 'T', 'O' ) ; Second_d S_obj( 'E', 'N', 'D' ) ;
Base * p ;
p = & B_obj ; p -> who() ;
p = &F_obj ; p -> who() ;
p = &S_obj ; p -> who() ;
F_obj.who() ;
( ( Second_d * ) p ) -> who() ;
}
(通过基类指针只能访问从基类继承的成员)
注意:1.一个虚函数,在派生类层界面相同的重载函数都保持虚特性;
2.虚函数必须是类的成员函数;
3.不能将友元说明为虚函数,但虚函数可以是另一个类的友元。
4.析构函数可以是虚函数,但构造函数不能是虚函数。
纯虚函数:是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本
说明形式:virtual 类型 函数名(参数表)=0;