1、多态性、运算符重载、纯虚函数、抽象类83 练习题1什么是多态性?为什么说它是面向对象程序设计的一个重要机制?2函数重载的含义是什么?定义重载函数时应注意些什么问题?3运算符重载的含义是什么?是否所有的运算符都可以重载?4运算符重载有哪两种形式?这两种形式有何区别?5运算符重载函数使用关键字 con st 说明后,是指什么不可改变?6静态联编和动态联编的区别是什么?7什么是虚函数?为什么要定义虚函数?它与动态联编有何关系?8什么是纯虚函数?什么是抽象类?9虚析构函数有什么作用?10总结 C+语言的多态性包含哪些内容?84 作业题一、选择填空对定义重载函数的下列要求中。( )是错误的A要求参数的个
2、数不同B要求参数中至少有一个类型不同C要求参数个数相同时。参数类型不同D要求函数的返回值不同2.下列函数中,( ) 不能重载。A成员函数B非成员函数C析构函数D构造函数3下列对重载函数的描述中,( )是错误的。A重载函数中不允许使用默认参数B重载函数中编译系根据参数表进行选择C不要使用重载函数来描述毫无相干的函数D构造函数重载将会给初始化带来多种方式4下列运算符中,( )运算符不能重载。A show();B()Virtual void show( )cout”B:show()called ”bendl ;Protected:int b:class D:public BPublic:D(int
3、i):B(t) di 十 100;show() ;D() void show()cout”DC:show(0 called.”dendl;protected:int d:;void main()D d1(108);分析:该程序中定义了 B 类和 D 类两个类。其中,D 类是公有继承 B 类的派生类。在主函数中,仅创建一个 D 类对象 d1,于是调用 D 类的构造函数,先调用基类 B 的构造函数,给数据成员 b 初始化,又调用 B 类的 show()函数,输出显示如下信息。B:show(0 called.158接着执行派生类 D 的构造函数体,给数据成员 d 初始化,又调用 D 类的 show(
4、)函数,输出显示如下信息。D:show(0 called.208请读者思考。将 B 类中 show()函数说明为 virtual 函数时,输出结果会有变化吗?再将 D 类继承 B 类的方式改为私有,输出结果会有变化吗?为什么?2#include class Bpublic:B() B(int i)b=i;Virtual void virfun( )cout”B :virfun()calledn”;private: int b;class D:public Bpublic:D() D(int i,int j):B(i)d j;)Prtvate:int d;void virfun()cout”D:
5、 virfun()calledn” ;;void fun(B*obj)obj 一virfun();void main()D * pdnew D;fun(pd);分析:该程序中,定义了派生类 D 公有继承基类 B,基类 B 中说明了非静态成员函数 virfun()为虚函数在派生类 D 中对它进行了重新定义。在一般函数 fun()中,通过对象指针来调用虚函数,于是实现了动态联编,输出显示上述结果。请读者思考下列问题。(1)将一般函数 fun()的形参改为 D 类的对象,并做相应修改后,输出结果会改变吗?为什么?(2)仅将 B 类中 virfun()函数前边 virtual 关键字去掉,其余不变,输
6、出结果会改变吗?为什么?(3)仅将 D 类继承 B 类的方式改为私有,其余不变,编译该程序时会出现什么错误?为什么?3材 includeiostream。hClass Apublic:A()ver A;void print() cout”The A version”verendl; protected:Char ver;class D1:public Apublic:D1(int number) infonumber; ver=1;void print()cout”The D1 info:”info”version ”verendl;private:int info;class D2:publ
7、ic Apublic:D2(int number) infonumber; void print( )cout ”The D2 info:”info”version ”verendI ;private:int info;class D3:public D1publjc:D3(int number):D1(number)info:number ;ver=3;void print()cout ”The D3 info :”info”version”verendl; prnvate:int info;void Print_info(A *p)p 一print();void main()A a;D1
8、d1(4);D2 d2(100);D3 d3(一 25);print_info(print_info(d2);print_info(分析:该程序中,定义一个基类 A,又定义两个派生类 D1 和 D2,它们公有继承基类 A.又定义一个派生类 D3,它公有继承 Dl 类。定义一个一般函数罗 print_info(),它的形参是指向对象的指针。主函数中定义了 4 个类的 4 个对象,并用它们的地址值作为实参 4 次调用print_info()函数,它们的调用都采用静态联编,因此输出显示上述结果。4#includeiostreamhclass Apublic:A()ver A;virtua1 void print()cout”The A version”verendl; Protected:Char ver; 缺 204 205 206