k++; }
void Csample::Display( ) {
cout<<\}
void main( ) {
Csample a,b; a.Display( ); b.Display( ); }
3.按要求编写程序。
(1)编写一个程序,设计一个产品类Product,其定义如下: class Product {
char *name; //产品名称 int price; //产品单价 int quantity; //剩余产品数量 public:
product(char *n,int p int q); //构造函数 ~product( ); //析构函数 void buy(int money); //购买产品
void get() const; //显示剩余产品数量 };
并用数据进行测试。
4.编写出程序,计算两点之间的距离。
提示:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。
5.定义盒子Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。 6.定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。 7.编写一个程序计算两个给定的长方形的周长和面积。 8.编写一个程序,采用一个类求n!,并输出10!的值。
9.编写一个程序,设计一个Cdate类,它应该满足下面的条件:
1)用这样的格式输出日期:日-月-年。 2)输出在当前日期上加两天后的日期。
3)设置日期。
第11章复习思考题
1.选择题
(1)C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过( )派生了新的类。
A.复用 B.继承 C.封装 D.引用
(2)继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性 B.传递性 C.重复性 D.多样性 (3)下列对基类和派生类关系的描述中,错误的是( )。 A.派生类是基类的具体化 B.派生类是基类的子集 C.派生类是基类定义的延续 D.派生类是基类的组合
(4)下列对派生类的描述中,错误的是( )。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类
C.派生类的缺省继承方式是private
D.派生类只继承了基类的公有成员和保护成员 (5)下列对继承的描述中,错误的是( )。 A.析构函数不能被继承 B.派生类也是基类的组合
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员 D.派生类中继承的基类成员的访问权限到派生类保持不变
(6)派生类的对象对它的基类成员中( )是可以访问的。 A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 (7)下列说法错误的是( )。
A.公有继承的基类中的public成员在派生类中仍是public的 B.公有继承的基类中的private成员在派生类中仍是private的 C.私有继承的基类中的public成员在派生类中仍是private的 D.保护继承的基类中的public成员在派生类中仍是protected的 (8)下面叙述错误的是( )。
A.基类的protected成员在派生类中仍然是protected
B.基类的protected成员在public派生类中仍然是protected的 C.基类的protected成员在private派生类中是private的 D.基类的protected成员不能被派生类的对象访问 (9)C++类体系中,不能被派生类继承的有( )。
A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数 (10)设置虚函数的声明中,正确的是( )。
A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 (11)下列虚基类的声明中,正确的是( )。
A.class virtual B:public A B.virtual class B:public A C.class B:public A virtual D.class B: virtual public A
(12)在下面的表达式中,不表示虚继承的是( )。 A.virtual public B.public virtual C.public D. virtual
2.比较类的三种继承方式public(公有继承)、protected(保护继承)、private(私有继承)之间的差别。
3. 派生类构造函数执行的次序是怎样的?
4. 如果在派生类B已经重载了基类A的一个成员函数fn1(),没有重载成员函数fn2(),如何调用基类的成员函数fn1(),fn2()?
5. 什么叫做虚基类?它有何作用?
6. 声明一个Shape基类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。
7. 声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。
8.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。
第12章复习思考题
1.选择题
(1)下列关于动态联编的描述中,错误的是( )。 A.动态联编是以虚函数为基础
B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编是在编译时确定操作函数的 (2)关于虚函数的描述中,正确的是( )。 A.虚函数是一个静态成员函数 B.虚函数是一个非成员函数
C.虚函数即可以在函数说明明定义,也可以在函数实现时定义 D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 (3)下面4个选项中,( )是用来声明虚函数的。 A.virtual B.public C.using D.false (4)编译时的多态性可以通过使用( )获得。 A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 (5)关于纯虚函数和抽象类的描述中,错误的是( )。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具体纯虚函数的类
C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 (6)下列描述中,( )是抽象类的特征。
A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能说明其对象 (7)以下( )成员函数表示虚函数。
A.virtual int vf(int); B.void vf(int)=0;
C.virtual void vf()=0; D.virtual void vf(int) { }; (8)如果一个类至少有一个纯虚函数,那么就称该类为( )。 A.抽象类 B.虚函数 C.派生类 D.以上都不对 (9)要实现动态联编,必须通过( )调用虚函数。 A.对象指针 B.成员名限定 C.对象名 D.派生类名 (10)下面描述中,正确的是( )。 A.virtual可以用来声明虚函数
B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C.即使基类的构造函数没有参数,派生类也必须建立构造函数 D.静态数据成员可以通过成员初始化列表来初始化 2.什么叫做多态性?在C++语言中是如何实现多态的?
3.什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数? 4.声明一个参数为整型、无返回值、名为fun1的虚函数。
5.在C++语言中,能否声明虚构造函数?为什么?能否声明虚析构函数?有何用途?
6.实现重载函数Double(x),返回值为输人参数的两倍;参数分别为整型、长整型、浮点型、双精度型,返回值类型与参数一样。
7.声明一个Rectangle类,有长itsWidth、宽itsLength等属性,重载其构造函数Rectanle()和Rectangle(int width,int length)。
8.声明计数器Counter类,对其重载运算符“+”。
9.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义Speak( )成员函数,基类中定义为虚函数。声明一个Dog类的对象,调用Speak()函数,观察运行结果。
10.声明一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。
11.应用抽象类,求圆、圆内接正方形和圆外切正方形的面积和周长。
12.分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/ 适用于复数运算。
第13章复习思考题
1. 当使用ifstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 2. 当使用ofstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 3. 当使用fstream流类定义一个对象并打开一个磁盘文件时,文件的隐含打开方式是什么? 4.若在程序文件中进行标准输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 5.若在程序文件中进行文件的输入输出操作,则必须在文件开始的#include命令中使用哪一个头文件? 6.什么是格式状态标志? 7.程序中有说明语句:
int a1; char a2 ; double a3 ; 根据下面的输出要求写出相应的cout语句。
(1)输出a1、a2、a3的值,每两个值之间用5个空格间隔。; (2)以固定长度10按左对齐方式输出变量a1的值。
(3)以固定长度10按左对齐方式输出变量a1的值,如果a1值为正,要求输出前面的正号。 (4)以固定长度15按右对齐方式输出变量a3的值,用填充字符*填充不足部分(用浮点数的定点数表示法表示)。
(5)以固定长度15、小数点后保留3位、按左对齐方式输出变量a3的值。 8. 现在需要打开empfile文件,进行文件更新操作,应使用什么语句来实现? 9.在C++语言中,二进制文件可以用来存放哪些数据类型的数据?
10.执行完函数调用indata.seekg(0 ,ios : : end);后。函数indata.tellg()将返回什么值? 11.简述几种打开文件方式ios::in 、ios::out、ios::app及ios::in|ios::out之间的区别。 12.如何判断打开文件操作是否成功?
13.函数exit()的功能是什么?在程序中的作用是什么?
14.函数close()实现什么操作?为什么完成对文件的操作后应及时关闭文件? 15.顺序访问文件与随机访问文件之间的区别是什么?
16.编写一个完整的C++程序,功能是读取一个文本文件的内容,并将文件内容以10行为单位输出到屏幕上,每输出10行就询问用户是否结束程序,不是则继续输出文件后面的内容。
17.按下面每个题目的要求编写出相应的函数 (1)利用一个字符文件保存100以内的所有素数。
(2)利用一个字节文件保存10个100以内的随机整数,要求保存的所有值各不相同。