myFloatC = max(myFloatX, myFloatY); cout << \} 30、
#include
public: virtual void draw() = 0; //纯虚函数 };
class Rectangle: public Shape //派生类Rectangle {
public: void draw() //覆盖纯虚函数draw() { cout << \绘制矩形\ } };
class Circle : public Shape //派生类Circle {
public:
void draw() //覆盖纯虚函数draw() { cout << \绘制圆\ } };
void main(void) { Shape *p; p = new Rectangle(); p->draw(); p = new Circle(); p->draw(); } 31、
#include
A(){cout<<\~ A(){cout<<\ };
36
class B { public:
B(){cout<<\~ B(){cout<< \ };
class C:public A,virtual public B { public:
C ( ):A( ),B( )
{cout<<\~ C( ){cout<<\ };
void main() { C c; } 32、
#include\class objcount { private:
static int count; public:
objcount() { count++; }
static int get() { return count; } };
int objcount::count=0; void main()
{cout< cout< public: A(void) {} virtual void vf1(void)const {cout << \基类的vf1()函数\} }; class B: public A { public: B(void) {} 37 void vf1(void)const { cout << \派生类的vf1()函数\} }; void main(void) {A *pa; A myA; B myB; pa=&myA; pa->vf1(); pa=&myB; pa->vf1(); } 三、编程题 1、设计一个程序,定义一个矩形类,包括数据成员和函数成员。要求有构造函数、析构函数,完成赋值、显示、计算矩形的面积等接口,并编写main函数进行测试。 2、设计一个2行3列的矩阵类Matrix,定义其构造函数、输入成员函数input和输出成员函数display,重载运算符“+”,求两个矩阵的加法。 3、定义一个学生类,数据成员包含姓名、学号、C++成绩、英语成绩和数学成绩,定义构造函数初始化,定义析构函数,定义成员函数total_ave 求总成绩和平均成绩,编写主函数进行测试。 4、定义一个字符串类String,用来存放不定长的字符串,重载运算符“= =”、“<”和“>”,用于两个字符串的等于、小于和大于的比较运算。 5、编写一个完整的程序,有两个函数重载,第一个函数返回一个整型数组的平均值,第二个函数返回一个浮点型数组的平均值,分别输出平均值。 6、定义一个类countstr,要求用构造函数设置计数器count的初始值为0,成员函数countchar( )步返回任何值,它要求输入一段文字,按回车键后结束计算,用count记录输入的字符个数,成员函数getchar( )输出count的整数值。 7、定义一个分数类 Franc,其数据成员nume(分子)和deno(分母),在主函数中实现两个分数对象的输入输出的重载,输出格式如:4/5,利用main函数编制完整程序。 8、输出200~300之间的所有素数。 9、定义一个点类Point,要求如下: 1)构造函数初始化类Point的对象;2)定义其成员函数Distance,计算平面上两点之间的距离;3)利用主函数进行测试。 10、定义一个复数类Complex,其数据成员为real和image,实现复数类的对象的输入输出重载。 11、主函数输入一个十进制数,输出它的二、八进制;编写一个函数,实现十进制转换为二、八进制。 12、定义一个矩形类Rect,数据成员为length、height,要求有构造函数、析构函数,其成员函数area求矩形面积,利用主函数进行测试。 13定义一个复数类Complex,其数据成员为real和image,实现复数对象的加减法运算符重载。 38 14、编写学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。 15、设计一个三个数中找出最大值的函数模板,并设计一个则试程序进行测试。测试程序中三个数值既可以同时为int类型,也可以同时为float类型。 16、编写一个程序,计算正方体和圆柱体的体积。 (要求:声明一个抽象基类 container(容器),派生类cube(正方体)和cylinder(圆柱体),基类中求体积的成员函数声明为纯虚函数。) 17、编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“test.dat”中。 18、定义一个分数类 Franc,其数据成员nume(分子)和deno(分母),实现两个分数对象的加法与减法的重载,编写main函数进行测试。 19、声明一个点类和直线类,编写一程序,求一点到直线的距离。 已知:点P(x0, y0)和直线l:Ax+By+C=0,则P点到直线 l 的距离d为: 00 22 20、定义一个复数类Complex,其数据成员为real和image,实现复数对象的加减法运算符重载,并利用主函数进行测试。 四、填空 d?Ax?By?CA?B1、如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。 2、假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为__________。 3、假定用户为类AB定义了一个构造函数\aa) {a=aa;}\,该构造函数实现对数据成员_________的初始化。 4、作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有________ 个操作数。 5、当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到________的开始位置。 6、C++支持两种多态性:__________时的多态性和_________时的多态性。 7、一个类的________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。 39 8、假定用户为类AB定义了一个构造函数\,char *bb=NULL):a(aa),b(bb){}”,则该类中至少包含有_________个数据成员。 9、重载插入运算符<<时,其运算符函数的返回值类型应当是_________。 10、对虚函数使用基类类型的指针或引用调用,系统使用____________联编;而使用对象调用时,系统使用____________联编。 11、面向对象程序设计的____________机制提供了重复利用程序资源的一种途径。 12、在类定义中,类说明以关键字class开始,其后跟____________,它必须是一个有效的C++标识符。类说明的内容用花括号括起来,称为____________。 13、允许访问一个类的所有对象的私有成员、公有成员和保护成员的函数是该类的_________和____________。 14、实现类对象初始化任务的是该类的____________。 15、C++是通过引用运算符__________来定义一个引用的。 16、在C++中要创建一个文件输入流对象fin,同时该对象打开文件“Test.txt”用于输入,则正确的声明语句是________________。 17、C++中用于单行注释的字符是( )。 18、函数重载时,要求重载的函数至少在( )或( )上与已定义的函数不同。 19、C++语言允许变量在程序的 ( )位置定义。 20、cin与操作符( ) 配合可用于键盘输入,它包含在头文件 ( ) 中。 21、C程序员以编写函数为重点,在C++中,程序员把重点放在( )上而不是函数上。 22、类中与类同名的成员函数是( ) 。 23、如果一个函数前面加有关键字( ),则这样的函数称为内联函数。 24、不能实例化为任何对象,仅做为基类被其他类继承的类为( ),此类中至少含有一个( ) 。 40 25、 在类定义中,类说明以关键字class 开始,其后跟( ),它必须是一个有效的C++标识符。 26、( )运算符用于向系统动态申请一块内存空间。 27、从基类产生派生类的方法一般分为( )和( )两种。 28、cout与操作符( ) 配合可用于键盘输入,它包含在头文件 ( ) 中。 29、( )运算符用于释放由new运算符动态分配的存储空间。 30、异常处理过程主要有三个步骤,对应的各个步骤的关键字分别是:throw、( )和( )。 五、简答题 1、什么叫运算符重载?运算符重载有什么意义? 2、友元方法有什么优点和缺点? 3、什么叫虚基类?怎样解决多重继承中成员变量的二义性问题? 4、解释类模板与模板类。其中哪个可以用来定义对象? 5、什么样的析构函数不能设计为空?析构函数可以重载吗? 6、什么叫多重继承?什么叫公共基类? 7、什么叫抽象类?抽象类有什么用途? 8、写出类模板的语句格式,说明类模板的使用方法。 41