1、1判断题5 使用关键字 class 定义的类中默认的访问权限是私有(private)的. 对6 作用域运算符(:)只能用来限定成员函数所属的类. 错7 构造函数和析构函数都不能重载. 错8 析构函数是一种函数体为空的成员函数. 错9 说明或定义对象时,类名前面不需要加 class 关键字. 对10 对象成员的表示与结构变量成员的表示相同,使用运算符.或-. 对11 所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的. 对12 某类中的友元类的所有成员函数可以存取或修改该类中的私有成员. 对13 可以在类的构造函数中对静态数据成员进行初始化. 错14
2、 函数的定义不可以嵌套,类的定义可以嵌套. 对15 C+语言中,既允许单继承,又允许多继承. 对16 派生类是从基类派生出来,它不能再生成新的派生类. 错17 派生类的继承方式中有两种:公有继承和私有继承. 错18 在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的. 错19 在公有继承中,基类中只有公有成员对派生类对象是可见的. 对20 在私有继承中,基类中只有公有成员对派生类是可见的. 错21 在私有继承中,基类中所有成员对派生类的对象都是不可见的. 对22 在保护继承中,对于派生类的访问同于公有继承,而对于派生类的对象的访问同于私有继承. 对23 派生类中至少包含了它的所有基类
3、的成员,在这些成员中可能有的是不可访问. 对24 构造函数可以被继承. 错25 析构函数不能被继承. 对26 子类型是不可逆的. 对27 只要是类 M 继承了类 N,就可以说类 M 是类 N 的子类型. 错28 如果 A 类型是 B 类型的子类型,则 A 类型必然适应于 B 类型. 对29 多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序. 对30 单继承情况下,派生类中对基类成员的访问也会出现二义性. 错31 解决多继承情况下出现的二义性的方法之一是使用成员名限定法. 对32 虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对象的问题.
4、对33 指向对象的指针和指向类的成员的指针在表达形式上是不相同的. 对34 已知:m 是类 A 的对象,n 是类 A 的公有数据成员,p 是指向类 A 中 n 成员的指针.下述两种表示是等价的. m.n 和 m.*p 对35 指向对象的指针与对象都可以作为函数参数,但是使用前者比后者好些. 对36 对象引用作为函数参数比用对象指针更方便些. 对37 对象数组的元素可以是不同类的对象. 错38 对象数组的既可以赋初值又可以赋值. 对39 指向对象数组的指针不一定必须指向数组的首元素. 对240 一维对象指针数组的每个元素应该是某个类的对象的地址值. 对41 const char *p 说明了 p
5、 是指向字符串常量的指针. 对42 一个能够更新的变量使用在一个不能被更新的环境中是不破坏类型保护的,反之亦然.错43 一个类的构造函数中可以不包含对其子对象的初始化. 错44 转换函数不是成员函数,它是用来时行强制类型转换的. 错45 使用模板可以减少重复劳动,提高代码重用率. 对46 C+语言中模板分为函数模板和类模板两种. 对47 类模板可以生成若干个模板类,每个模板类又可定义若干个对象. 对48 使用提取符(和作用域运算符 D 静态数据成员不是所有对象共用的17 友元的作用( A ).A 提高程序的运行效率 B 加强类的封装性C 实现数据的隐藏性 D 增强成员函数的种类18 已知一个类
6、 A,( C )是指向类 A 成员函数的指针.假如类有三个公有成员:void f1(int),void f2(int)和 int a.A A *p int B A:*pc= 其中 ,Aptr 应该是( C ).A 指向字符常量的指针 B 指向字符的常量指针C 指向字符串常量的指针 D 指向字符串的常量指针26 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,( A )是正确的.A void print() const B const void print() C void const print() D void print (const)27 关于 new 运算符的下列
7、描述中,( D )是错误的.A 它可以用来动态创建对象和对象数组 B 使用它创建的对象或对象数组可以使用运算符 delete 删除 C 使用它创建对象时要调用析构函数 D 使用它创建对象数组时必须指定初始值28 关于 delete 运算符的下列描述中 ,( C )是错的.A 它必须用于 new 返回的指针 B 它也适用于空指针 C 对一个指针可以使用多次该运算符 D 指针名前只用一对方括号符 ,不考虑所删除数组的维数29 具有类型转换功能的构造函数,应该是( B ).A 不带参数的构造的构造函数 B 带有一个参数的构造函数 C 带有两个以上参数的构造函数 D 默认构造函数30 下列关于模板的描
8、述中,错误的是( C ).A 类模板的成员函数可以是函数模板 B 类模板生成模板类时,必须指定参数化的类型所代表的具体类型C 定义类模板时只允许有一个模板参数 D 类模板所描述的是一组类31 下列关于多态性说法不正确的是( C ).A 多态性是指同名函数对应多种不同的实现 B 多态性表现为重载和覆盖两种方式 C 重载方式仅有函数重载 D 重载方式包含函数重载和运算符重载32 下列函数中,( D )不能重载.A 成员函数 B 非成员函数 C 构造函数 D 析构函数33 下列运算符中,( C )个运算符不能重载 .A 输出指针 pa 十进制的地址值的方法是( D ).A cout # else #
9、 endifA 整常量表达式 B 任何标识符 C 任意表达式 D 被定义的宏名52 带参数的宏定义中, 程序中引用宏定义的实参( D ).A 只能是常量 B 只能是整型量 C 只能是整型表达式 D 可以是任意表达式53 下列( A )是语句.A ; B a=17 C x+y D cout T min ( T x ,T y ) return x操作有意义83 “已知函数模板定义如下:template T min ( T x ,T y ) return x D int n=3; m3 B +a+b+ C b+(a=3) D (a=3)-a-118 用来表示指向结构变量指针的成员是( B )运算符.
10、A B - C D /*FOUND*/#include 14#include void main()fstream outfile,infile;/*FOUND*/outfile.open(“text.dat“,ios:in);if(!outfile)cout2 outfile.open(“text.dat“,ios:out);153 infile.open(“text.dat“,ios:in);4 while(!infile.eof()【程序改错】-题目:将运算符“ 重载为类的成员函数,实现类的两个对象的相加运算。-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include
11、class sampleprivate:int x;public:sample()sample(int a)x=a;void disp()coutclass Apublic:A(char *s)cout18class Matrix/*FOUND*/publicMatrix(int r,int c)row=r; col=c;elem=new doublerow*col;/*FOUND*/double operator()(int x,int y)return elemcol*(x-1)+y-1;/*FOUND*/Matrix() /*FOUND*/delete elem;private:doub
12、le *elem;int row,col;void main()Matrix m(5,8);for(int i=0;iclass pointint x;int y;/*FOUND*/private:point(int a,int b)x=a;y=b;int getx()return x;int gety()return y;/*FOUND*/class circle: pointprivate:int r;public:/*FOUND*/circle(int a,int b,int c)r=c;int getr()return r;float area()return 3.14159*r*r;
13、void main()circle c(5,7,9);coutclass Bpublic:B() B(int i) b=i;/*FOUND*/void virfun()coutvirfun();void main()D *pd=new D;fun(pd);参考答案:1 virtual void virfun()2 class D: public B3 D(int i,int j):B(i)4 void fun(B *obj)*/C+程序填空-题干/*-【程序填空】-题目:从键盘输入字符,并使用 isdigit()判断是否是数字字符符,是则返回非零,否则返回 0。并在屏幕上显示数字串。-*/*S
14、PACE*/【?】#includeint getnum(char *s);void main()22char buf80;cout2 getnum(buf)3 char ch;4 flag=1;/*-【程序填空】-题目:利用重载运算符实现复数类对象的算术加减法运算。23使用重载为类成员函数的方法实现。-*/#include class complexpublic:complex()real=imag=0;complex(double r,double i) real=r;imag=i;/*SPACE*/【?】complex operator -(const complex friend voi
15、d print(const complex private:double real,imag;inline complex complex:operator +(const complex inline complex complex:operator -(const complex void print(const complex string(string string(int size=80);string()delete sptr;int getlen()return length;void print()cout 或 #include “string.h“2 char *s 或 ch
16、ar *3 strcpy4 int size */题目:将一维数组大于等于平均值的元素存入另一个数组,小于平均值的元素仍存在原数组,并打印这两个数组。#include void main()int i,sum,la,lb,av,n;float a100,b100;/*SPACE*/26【?】;for(i=0;iai;/*SPACE*/【?】;for(i=0;i=av)blb+=ai;else/*SPACE*/【?】;for(i=0;in2 sum=03 av=sum/n4 bla+=ai*/【程序填空】-题目:该程序的输出结果为moth=7,day=22,year=1998moth=7,day
17、=23,year=1998moth=7,day=24,year=1998moth=7,day=25,year=1998moth=7,day=26,year=1998填空使程序完整。-*/#includeclass DATE27public:DATE()month=day=year=0;/*SPACE*/【?】void print()cout“month=“month“,day=“day“,year=“yearendl;private:/*SPACE*/【?】;DATE:DATE(int m,int d,int y)month=m;day=d;year=y;void main()DATE dates5=DATE(7,22,1998),DATE(7,23,1998),DATE(7,24,1998); dates3=DATE(7,25,1998); /*SPACE*/【?】for(int i=0;i5;i+)/*SPACE*/【?】答案DATE(int m,int d,int y);int month,day,year;dates4=DATE(7,26,1998)datesi.print();