一、 填空题(25小题,共50分)
(以下每小题1分,共10分)
1. 在C++中,函数的参数有两种传递方式,它们是值传递和________。
2. 当一个成员函数被调用时,该成员函数的_______指向调用它的对象。
3. 在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有____________,对此数据成员的访问将出现歧义。
4. 拷贝构造函数使用________作为参数初始化创建中的对象。
5. 在公有继承的情况下,基类数据成员在派生类中的访问权限__________。
6. 描述命题"A小于B或小于C"的表达式为_________。
7. 用new申请某一个类的动态对象数组时,在该类中必须能够匹配到______________________构造函数,否则应用程序会产生一个编译错误。
8. 静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象________。
9. 为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是与________________配对。
10. 设"int a=3,b=4,c=5;",表达式"(a+b)>c&&b==c"的值是____。
(以下每小题2分,共20分)
11. 面向对象的程序设计有四大特征,它们是抽象、封装、______ 、 ________。
12. 在Visual C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型_______;在基类和派生类中,成员函数的覆盖是指__________________________________________________。
13. 构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、______________, ______________________________
14. 动态联编要满足两个条件,它们是_________________________________,________________________ 。
15. 在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为_________,定义该类至少具有一个_____________。
16. 在C++类中,const关键字可以修饰对象和成员函数,const对象不能______________,const成员函数不能_____________。
17. 举出C++中两种用户自定义的数据类型:_______, _______ 。
18. C++中没有字符串类型,字符串是通过___________来表示的,每一个字符串都有一个结尾字符_____。
19. C++中没有输入输出语句,输入输出是通过___________ 实现的, 写出一条打印整型变量n的输出语句:___________
20. 举出C++中两种代码复用的方式:__________, __________。
(以下每小题4分,共20分)
21. 下面程序的运行结果是。
#include <stdio.h>
void main()
{
char a='a',b='j';
float x;
x=(b-a)/('F'-'A');
printf("%d\n",(int)(3.14*x));
}
22. 下面程序的运行结果是。
#include "iostream.h"
void main( )
{
int i=1;
while (i<=15){
i++;
if (i%3!=2) continue;
else cout <<"i="<<i<<endl;
}
}
23. 下面程序的运行结果是________。
#include "iostream.h"
class test
{
private:
int num;
float fl;
public:
test( );
int getint( ){return num;}
float getfloat( ){return fl;}
~test( );
};
test::test( )
{
cout << "Initalizing default" << endl;
num=0;fl=0.0;
}
test::~test( )
{
cout << "Desdtructor is active" << endl;
}
void main( )
{
test array[2];
cout << array[1].getint( )<< " " << array[1].getfloat( ) <<endl;
}
24. 下面程序的运行结果是________。
#include <iostream.h>
class A
{
public:
A(){cout<<"A::A() called.\n";}
virtual ~A(){cout<<"A::~A() called.\n";}
};
class B:public A
{
public:
B(int i){
cout<<"B::B() called.\n";
buf=new char[i];}
virtual ~B()
{
delete []buf;
cout<<"B::~B() called.\n";
}
private:
char *buf;
};
void fun(A *a)
{
delete a;
}
void main()
{
A *a=new B(15);
fun(a);
}
25. 下面程序的运行结果是________。
#include <stdio.h>
int a[ ]={1,3,5,7,9};
int *p[ ]={a,a+1,a+2,a+3,a+4};
void main( )
{
printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);
printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);
}
二、 问答题(每小题5分,共20分)
1. 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
2. 简述成员函数、全局函数和友元函数的差别。
3. 简述结构化的程序设计、面向对象的程序设计的基本思想。
4. 结构struct和类class有什么异同?
三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)
(1)程序功能是倒序输出各给定的字符串。
#include <stdio.h>
void main()
{
char str[5][ ]={"First","Second","Third","Forth","Fifth"};
char *cp[ ]={str[4],str[3],str[2],str[1],str[0]};
int i;
while(i<=5)
{
printf("%c ",*(cp+i));
i++;
}
}
(2)程序功能是将各个平方根值放入数组中。
#include <stdio.h>
void main()
{
int max,a,i;
scanf("%d%d",max,a);
double x[max];
for (i=0;i<max;i++)
x[i]=sqrt(a*i);
}
四、(8分)下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数
class shape{
public:
virtual float area( )=0;
};
float total(shape *s[ ],int n)
{
float sum=0.0;
for(int i=0;i<n;i++)
sum+=s[i]->area( );
return sum;
}
五、(6分)完成顺序查找函数f_seq( )。其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整个表仍未找到所需对象,则查找失败
#include <stdio.h>
void f_seq(char *list[],char *object,int len)
//list 指针数组,指向字符串
//object 模式串
//len 表的长度
{
char **p;
int strcmp(char *s,char *t);
p=list;
while (_____①______) //
if (strcmp(*p,object)==0)
break;
else ______②_______; // if (p<list+len)
printf( "Success! **% d\n",p-list);
else printf("Unsuccess!\n");
}
int strcmp(char *s,char *t)
{
for (;*s==*t; s++,t++)
if (*s=='\0')
return(0);
return(_____③______); //
}
六、(8分)完成使链表逆置函数reverse,若有链表:
链表结点的结构如下:
struct node
{
int num;
struct node *next;
}
struct node* reverse(struct node *head)
//head 链表头结点
{
struct node *p,*temp1,*temp2;
if(head==NULL____①____) return head; //
p=head->next;head->next=NULL;
while(____②____) //
{
temp1=head;
____③____; //
temp2=p;
p=p->next;
____④____; //
}//Match while statenment
return head; //返回逆置后的链表的头结点
}
地址或指针或引用传递
this指针
作用域分隔符限定时
引用
保持不变
A<B||A<C
没有形参的或缺省参数
共享
与最近的if
0
继承, 多态
不同, 派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同
析构函数没有参数 、 析构函数可以定义为虚函数 。
被调用的成员函数是虚函数 、 用指针或引用调用虚函数
抽象类, 纯虚函数
被修改, 修改类数据成员
类 、 枚举
字符数组, \0
输入输出库, cout<<n;
继承 、 复用
21. 3
22. 2 5 8 11 14
23. Initalizing default
Initalizing default
0 0
Desdtructor is active
Desdtructor is active
24. A::A() called.
B::B() called.
B::~B() called.
A::~A() called.
25. 9 5 3
8 4 7
26. 解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
27. 解答要点:以下几点必须说清楚:
成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。
不是在类中定义的成员函数都是全局函数。
如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。
28. 解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。
29. 解答要点:struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。
三
1
① "char str[5][ ]={"First","Second","Third","Forth","Fifth"};"应为
"char str[5][10 ]={"First","Second","Third","Forth","Fifth"};"
② "while(i<=5)"应为"while(i<5)"
③ "printf("%c ",*(cp+i));"应为"printf("%s",*(cp+i));"
④ "int i;"应为"int i=0;"
2
① 增加"#include <math.h>"
② "scanf("%d%d",max,a);"应为"scanf("%d%d",&max,&a);"
③ "double x[max];"改为:
"double *x=new double[max];"
…
"delete []x;"
四
class Triangle:public Shape
{
public:
Triangle(double h,double w){H=h;W=w;}
double Area() const{return H*W*0.5;}
private:
double H,W;
};
class Rectangle:public Shape
{
public:
Rectangle(double h,double w){H=h;W=w;}
double Area()const{return H*W;}
private:
double H,W;
};
五
p<list+len
p++
s-t或*s-*t或1
六
||head->next==NULL
p!=NULL或p
head=p;
temp2->next=temp1;或head->next=temp1;
分享到:
相关推荐
C++测试题知识点整理 一、C++程序的基本结构 在每个C++程序中都必须包含有一个函数,该函数名为main,该函数是程序的入口点。main函数是C++程序的起点,它是操作系统调用的入口点。 二、类的构造函数 在C++中,...
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
C++测试题.html
2. **软件的开发过程**:通常包括需求分析、设计、编码、测试和维护等多个阶段。这一过程确保了软件产品的质量与稳定性。 3. **程序设计**:是创建可执行程序的过程,涉及算法的设计、数据结构的选择以及代码的...
在本主题"C++上机测试题"中,我们将深入探讨C++编程语言的关键概念和实践应用,同时也会涉及与C语言的关联。C++是一种强大的、面向对象的编程语言,它在系统编程、游戏开发、嵌入式系统、图形用户界面(GUI)等多个...
面试中,C++的测试题通常会涵盖语言的基础、内存管理、指针操作、字符串处理、类与对象以及标准库的使用等多个方面。以下是对这些题目进行的详细解析: 1. 代码执行的结果是什么? ```cpp void avoidmain(){} // ...
【C++初级测试知识点详解】 1. **改错题**: 在提供的代码中,存在一个错误:`compare` 函数未返回任何值。在 C++ 中,每个非空的函数都必须有一个返回值,即使它没有实际的业务逻辑。在 `main` 函数中,`compare`...
总的来说,这份"C++测试题整理"资料对于C++初学者和进阶者都极具价值。它能帮助学习者检验自己的编程水平,找出知识盲点,进而有针对性地进行学习和提升。无论是在学术考试还是实际工作中,熟悉并掌握这些知识点都是...
在这个测试题中,我们被要求创建一个形状类`Shape`的派生类,包括`Circle`(圆)、`Triangle`(三角形)和`Rectangle`(矩形),并且需要重写基类中的成员函数以返回正确的几何特性,如面积和周长,并且展示对象的基本信息...
C++题库非常好的内部练习题(答案) 以下是从给定的文件中生成的相关知识点: 1. C++变量赋值:在C++中,左侧必须是一个有效的左值,否则编译器将报错。例如,`a = 10`是正确的,但`左侧不是一个有效的左值,例如`...
### C++选择题知识点解析 #### 1. 下列的各类函数中,不是类的成员函数。(C) - **选项分析**: - A) 构造函数:构造函数是类的一部分,用于初始化对象。 - B) 析构函数:析构函数也是类的一部分,用于释放对象...
慧通教育C++测试题 103263--103267(5题)--2024.10.08
本资料集围绕“C++程序设计语言基本编程技能测试题和答案”,将涵盖C++的核心概念,包括语法基础、面向对象编程、内存管理以及标准库的使用等关键知识点。 1. **C++语法基础**:C++的语法与C语言有许多相似之处,但...
【标题】"华为C++笔试题及答案"涵盖了华为公司在招聘过程中对C++编程技能的考核要点,这类题目通常用于评估应聘者的基础编程能力、问题解决能力和对C++特性的理解程度。C++是一种强大的、面向对象的编程语言,广泛...
总之,蓝桥杯C++历年真题不仅涵盖了C++的基础知识,也测试了选手的逻辑思维、算法设计和问题解决能力。通过深入学习和反复实践,同学们不仅可以提升编程技能,还能在实际竞争中积累宝贵的经验。在解题过程中,不要...
一般将类的析构函数设置为纯虚函数即可将这个类定义为抽象类,抽象类中至少有一个纯虚函数(虚函数是指一个类中你希望重写的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际...
根据给定文件的信息,我们可以总结出以下相关的C++知识点: ### C++程序开发流程 - **编辑**: 使用文本编辑器或IDE(集成开发环境)编写C++源代码,并保存为`.cpp`文件。 - **编译**: 使用编译器(如g++、clang++...
本资源"**C++模拟题及模拟题答案**"正是一份专为C++初学者或备考者设计的资料,旨在帮助他们在考前进行充分的自我测试和复习。 首先,**C++模拟题.doc**提供了多道精心设计的题目,涵盖了C++语言的基础语法、数据...