如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
6.1、多态性的概念6.3、虚函数6.4、纯虚函数与抽象类6.1、多态性的概念6.3、虚函数虚函数的注意事项:1、有时在基类中定义的非虚函数会在派生类中重新定义,如果用基类指针调用该成员函数,则系统会调用对象中基类部分的成员函数,如果用派生类指针调用该成员函数,则系统会调用派生类对象中的成员函数,这不是多态性行为。2、函数重载是处理同一层次上的同名函数问题,而虚函数处理和是不同派生层次上的同名函数问题,前者是横向重载,后者可以理解为纵向重载。3、virtual只能用于声明类的成员函数,不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义,只能用于类的继承层次结构中。4、一个成员函数被声明为虚函数后,在同一类族中的类不能再定义一个非virtual的但与该虚函数首部完全相同的函数。5、构造函数不能声明为虚函数。6.3.2虚析构函数:问题:当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后调用基类的析构函数。但是如果用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量。在程序中用带指针参数的delete运算符撤销派生类对象时,会发生一个情况:系统只执行基类的析构函数,而不执行派生类的析构函数。解决办法:把析构函数定义为虚函数。注意:如果将基类的析构函数声明为虚函数时,由该基类派生出的所有派生类的析构函数也都自动成为虚函数,即使派生类的析构函数与基类的析构函数名不相同。建议把基类的析构函数定义为虚函数。例6.36.4纯虚函数与抽象类什么是抽象类:在面向对象程序设计中,往往有一些类,它们不是用来生成对象,而是用它作为基类去建立派生类。这种不用来定义对象而只是作为一种基本类型用作继承的类,称为抽象类(也称抽象基类)。凡是包含纯虚函数的类都是抽象类(注意:抽象类中可以有非纯虚函数成员)。抽象类的注意事项:因为纯虚函数是不能被调用的,所以包含纯虚函数的类(抽象类)是不能建立对象的。如果在派生类中没有对所有的纯虚函数进行定义,则此派生类仍然是抽象类,仍然不能建立对象。虽然抽象类不能定义对象,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类之后,可以用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性。例6.4