1、D. 310. 下列不是描述类的成员函数的是()A. 构造函数B. 析构函数C. 友元函数D. 拷贝构造函数11. 如果从原有类定义新类可以实现的是()A. 信息隐藏B. 数据封装C. 继承机制D. 数据抽象12. 下面有关类说法不正确的是()A. 一个类可以有多个构造函数B. 一个类只有一个析构函数C. 析构函数需要指定参数D. 在一个类中可以说明具有类类型的数据成员13. 在函数定义中的形参属于()A. 全局变量B. 局部变量C. 静态变量D. 寄存器变量14. 下列有关重载函数的说法中正确的是()A. 重载函数必须具有不同的返回值类型B. 重载函数参数个数必须相同C. 重载函数必须有不同
2、的形参列表D. 重载函数名可以不同15. this指针存在的目的是()A. 保证基类私有成员在子类中可以被访问B. 保证基类保护成员在子类中可以被访问C. 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码D. 保证基类公有成员在子类中可以被访问16. 关于new运算符的下列描述中,错误的是()A. 它可以用来动态创建对象和对象数组B. 使用它创建的对象或对象数组可以使用运算符delete删除C. 使用它创建对象时要调用构造函数D. 使用它创建对象数组时必须指定初始值17. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确的是()A. A1.p=
3、5;B. A1-p=5;C. A1.*p=5;D. *A1.p=5;18. 以下基类中的成员函数表示纯虚函数的是()A. virtual void tt()=0B. void tt(int)=0C. virtual void tt(int)D. virtual void tt(int)19. C+类体系中,不能被派生类继承的有()A. 常成员函数B. 构造函数C. 虚函数D. 静态成员函数20. 静态成员函数不能说明为()A. 整型函数B. 浮点函数D. 字符型函数二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。1. 假设int a=1,b
4、=2;则表达式(+a/b)*b-的值为_。2. 抽象类中至少要有一个_函数。3. 一个抽象类的派生类可以实例化的必要条件是实现了所有的_。4. 下面程序的输出结果为_。#include void main()int num=2,i=6;doi-;num+;while(-i);coutnumendl;5. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_。6. 在用C进行程序设计时,最好用_代替malloc。7. 由const修饰的对象称为_。8. 在C+程序设计中,建立继承关系倒挂的树应使用_继承。9. 基类的公有成员在派生类中的访问权限由_决定。10. 不同对象可以调用相同
5、名称的函数,但执行完全不同行为的现象称为_。11. this指针始终指向调用成员函数的_。12. 预处理命令以_符号开头。13. 类模板用来表达具有_的模板类对象集。14. C+程序的源文件扩展名为_。15. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是_的头文件。16. vector类中向向量尾部插入一个对象的方法是_。17. C+语言中如果调用函数时,需要改变实参或者返回多个值,应该采取_方式。18. 语句序列ifstream infile;infile.open(“data.dat”);的功能可用一个语句实现,这个语句是_。19. 如果要把类B的成员函数voi
6、d fun()说明为类A的友元函数,则应在类中加入语句_。20. 在编译指令中,宏定义使用_指令。三、改错题(本大题共5小题,每小题2分,共10分)下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。1. #include fstreamstringusing namespace std;class Apublic:A(const char *na)strcpy(name,na);private:char name80;class B:public A public:B(const char *nm):A(nm)void show();void B:show() coutname
7、:name B b1(B);b1.show();2. #include void f(int *a,int n)int i=0,j=0;int k=0;for(;in/2;i+)k=ai;ai=an-i-1;an-i-1=k;void show(int a,int n)for(int i=0;n;ai ;int p5;int i=0,n=5;5;pi=i;f(*p,n);show(p,n);3. #include int i(3),j(8);int * const p=&i;*pp=&j;4. #include void main()int i,*p;i=10;*p=i;cout5. #inc
8、lude class Aprivate:int x,y;public:void fun(int i,int j)x=i;y=j;void show()coutxyA a1;a1.fun(2);a1.show();四、完成程序题(本大题共5小题,每小题4分,共20分)1. 完成下面类中成员函数的定义。class strchar *st;str(char *a)set(a);str & operator=(_)delete st;set(a.st);return *this;void show()coutstvoid area()double a,b,c;Input a b c:_if(a+bc&
9、a+cb&c+ba)double l=(a+b+c)/2;_The area is:selseErrorarea();4. 下面程序中Base是抽象类。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:Der1 called!Der2 called!class Base_;class Der1:public Basevoid display()coutdisplay();Der1 b1;Der2 b2;Base * p=&b1;fun(p);b2;5. 下面程序中用来求数组和。s150。class Arrint *a,n;Arr():a(0),n(0)Arr(int *aa,
10、int nn)n=nn;a=new intn;for(int i=0;nn;*(a+i)=*(aa+i);Arr()delete a;_;return *(a+i);int b5=10,20,30,40,50;Arr a1(b,5);int i=0,s=0;_s+=a1.GetValue(i);s=五、程序分析题(本大题共4小题,每小题5分,共20分)1. 给出下面程序输出结果。class exampleint a;example(int b=5)a=b+;void print()a=a+1;cout avoid print()constexample x;const example y(2)
11、;x.print();y.print();2. 给出下面程序输出结果。 int *p1;int *p2=&p1;int b=20;p1=&b;*p23. 给出下面程序输出结果。int Y;Base(int y=0) Y=y;Base()nBase() coutBase()nvoid print() cout Yclass Derived:int Z;Derived (int y, int z):Base(y)Z=z;Derived(,zDerived() coutDerived()nvoid print()Base:print();ZDerived d(10,20);d.print();4.
12、给出下面程序输出结果。A()A 构造函数nfun();virtual void fun()A:fun() 函数nB()B构造函数nvoid fun() coutclass StringString(const char *str=NULL); / 普通构造函数String(const String &other); / 拷贝构造函数String(); / 析构函数String & operator=(const String & / 赋值函数m_datanew其中,成员函数名()const;常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。常对象只能调用它的常成员
13、函数,而不能调用其他成员函数。const关键字可以用于参与重载函数的区分。8答案:单解析一个基类可以派生多个子类,一个子类可以再派生出多个子类,这样就形成了一个倒立的树。9. 答案:访问控制方式或继承方式10. 答案:多态性解析多态性的概念。虚函数是实现多态的基础,运行过程中的多态需要同时满足3个条件:(1)类之间应满足子类型关系。(2)必须要有声明的虚函数。(3)调用虚函数操作的是指向对象的指针或者对象引用;或者是由成员函数调用虚函数(如果是在构造函数或析构函数中调用虚函数,则采用静态联编)11. 答案:对象this指针是隐藏的指针,它指向调用函数的对象。12. 答案:operater解析文
14、件包含、预处理和编译都是以开头13. 答案:相同处理方法解析模板特点是不同的数据具有相同的处理方法的抽象。14.答案:cpp解析源程序*.cpp,目标文件为*.obj,可执行程序*.exe。15. 答案:自定义解析include装入文件有两种方式和“”,一是系统的,一是自定义文件。16. 答案:push_back17. 答案:传地址或引用解析传地址即指针,在函数中通过指针修改它指向的变量的值时,实参也就变化了。使用引用,直接修改变量的别名即引用的值,该变量也就随着变化。18. 答案:ifstream infile(“data.dat”);解析void ifstream:open(const c
15、har *fname,int mode=ios:in,intaccess=filebuf:openprot);ifstream:ifstream(const char *fname,int mode=ios:in,int access=filebuf:其中,第一个参数是用来传递文件名的;第二个参数mode的值决定文件将如何被打开;第三个参数access的值决定文件的访问方式,一般取缺省值filebuf:openprot,表示是普通文件。mode的取值如下:(1)ios:in:打开一个文件进行读操作,而且该文件必须已经存在;(2)ios:nocreate:不建立新的文件。当文件不存在时,导致op
16、en()失败;(3)ios:noreplace:不修改原来已经存在的文件。若文件已经存在,导致open()失败;(4)ios:binary:文件以二进制方式打开,缺省时为文本文件。19. 答案:(P111)friend void B:解析声明成员函数作为另外一个类的友元函数时,使用类作用域运算符:20. 答案:#define解析静态成员是所有对象共享的特征,也就是类的特征。三1. 答案:因为name如果是私有的,在派生类中无法访问,而基类没有提供成员函数来访问name,所以更改name访问权限为公有或保护,这样对于派生类来说是透明的。修改public:或protected: 修改f(p,n);
17、解析f(*p,n);f函数第一个参数是指针而调用时使用*p,*p表示p所指向的变量或对象,不是地址即不是指针。在指针变量前加const表示一个常指针即地址不能变化,它指向的变量不能改变且定义时必须设置指向变量或对象的地址。修改int *p=&i*p=i;指针即地址没有被赋值。修改p=&void fun(int i,int j)调用时有一个参数,形参有两个,可以使第二个带默认值。修改void fun(int i,int j0)四1. 答案:a,st=new charstrlen(s)+1;解析对“”运算符进行重载,调用时s2=s1,都是对象,所以形参使用对象的引用,不要使用对象作为形参(产生临时对象)。使用strcpy进行字符的复制,st必须有一定的空间,空间是strlen(s)+1(0作为结束符,strlen得到的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1