一、判断题
1、重载插入运算符“<<”必须采用成员重载。对 错(可以外部重载,然后声明友元)
2、一个类中的保护成员和公有成员类似,在程序的任何地方都可以被访问。错
3、一旦自定义了构造函数,系统便不再提供缺省的构造函数。对
4、静态数据成员必须在类中进行定义和初始化。错(需要在类外进行初始化)
二、选择题
5、关于new运算符的下列描述中,(B)是错的。
A、使用它创建的对象和对象数组可以使用运算符delete删除
B、使用它创建对象数组时必须指定初始值
C、使用它创建对象时要调用构造函数
D、它可以用来动态创建对象和对象数组
6、在C++中使用流进行输入输出,其中专用于从键盘进行输入的流是(D)
A、cfile
B、cerr
C、cout
D、 cin
7、关于this指针的说法正确的是(A)。
A、成员函数拥有this指针
B、定义一个类后,this指针就指向该类
C、this指针必须显式说明
D、静态成员函数拥有this指针
8、关于虚函数的描述中,(B)是正确的。
A、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B、基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数
C、虚函数是一个static类型的成员函数
D、虚函数是一个非成员函数
9、在键盘上输入字符串时,应该(B)
A、使用双引号
B、不使用任何符号
C、以上均可
D、使用单引号
10、关于C++与C语言关系的描述中,(A)是错误的。
A、C++语言和C语言都是面向对象的
B、C语言与C++语言是兼容的
C、C++语言对C语言进行一些改进
D、C语言是C++语言的一个子集
11、已知下列语句中的x和y都是int型变量,其中错误的语句(D)
A、x=y++;
B、 ++x=y;
C、 x=++y;
D、(x+y)++;
12、若二维数组xxx有n列,则在a[i][j]之前的元素个数为(A)
A、 i*n+j
B、 i*n+j-1
D、j*n+i
C、i*n+j+1
13、C++源程序文件扩展名为(C)
A、.h
B、.obj
C、.cpp
D、.1ib
14、下列关于类和对象的说法中,正确的是(A)。
A、编译器为每个对象的数据成员分配内存
B、编译器为每个类和类的对象分配内存
C、类的成员函数由类来调用
D、类的对象具有成员函数的副本
三、填空题
15、当建立对象,程序自动调用该类的_ 构造 (注:两个字即可)函数。
16、面向对象程序设计的 继承 (注:两个字即可)机制提供了重复利用程序资源的一种途径。
17、每个对象都是所属类的一个_ 实例_。(注:两个字即可)
四、阅读理解
18、给出下列程序的运行结果。
class a2 {
public:
virtual void act1();
void act2() { act1(); }
};
void a2::act1() {
cout << "a2" << endl;
}
class c :public a2 {
public:
void act1();
};
void c::act1() {
cout << "c" << endl;
}
int main() {
c b;
b.act2();
}
输出:c
19、
int AD(int a[], int n) {
int x = 1;
for (int i = 0; i < n; i++)
x *= a[i];
return x;
}
int main() {
int a[] = { 2,8,6,5 };
cout << AD(a, 4) << endl;
}
输出:480
20、试论述:(限100字以内)
(1) struct和class的区别?
- 成员的默认访问:struct的成员默认是公开的,class的成员默认是私有的。
- 默认的继承方式:struct默认以public继承,class默认以private继承。
- class和typename还可以用于定义模版参数,struct不可以。
(2)在什么情况下,程序设计二者使用在功能上是相当?
- 都可以定义一个类
- 在c++中兼容c语言,所以c++中
struct
可以当成结构体去使用 - 俩者可以有成员变量,可以有成员函数,也可以定义
public
,private
,protected
数据成员 - 结构体定义之后,可以像类一样用结构体名来创建对象
- 俩者都可以继承或者被继承,也可以有虚函数
21、数组与指针的区别?(限50字以内)
如下代码,sizeof(a)输出为多少字节? sizeof(p)输出为多少字节?
char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl;
cout<< sizeof(p) << endl;
答:
- 存储方式:数组在内存中是连续存放的,在静态区或者在栈开辟一块连续的内存空间。而指针是指向一块内存区域,但指针的存储空间不能确定。
- 赋值:同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝。数组地址和容量在生命周期里不会改变,只有数组的内容可以改变;而指针却不同,他指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,他的内容是不可以被修改的。
sizeof(a)=12sizeof(p)=4;
22、
class A {
int a, b;
public:
A() { a = b = 0; }
A(int aa, int bb) :a(aa), b(bb) {
cout << "a=" << a << "," << "b=" << b << endl;
}
~A() { cout << "DESTRUCTOR!\n"; }
};
int main() {
A x, y(2, 3);
}
第一空:a=2,b=3
第二空:Destructor!
第三空:Destructor!
24、 试论述:进程和线程的区别。(限100字以内)(地址空间、开销、并发性、内存标准)
进程和线程主要的区别是他们是不同的操作系统资源管理方式。
- 进程有独立的地址空间;线程有自己的堆栈和局部变量,但是线程之间没有独立的地址空间
- 进程和线程切换时,需要切换进程和线程的上下文,进程的上下文切换时间开销要远远大于线程的上下文切换时间,耗费资源较大,效率要差一点
- 进程的并发性较低;线程的并发性较高并发性和并行性区别到底是什么? - 知乎 (zhihu.com)
- 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口;但是,线程不能独立执行,必须依存在应用程序中,由应用程序来提供多个线程执行控制
- 系统在运行的时候会为每个进程分配不同的内存空间;但是线程,除了CPU外,系统不会为线程分配内存空间(线程所使用的资源来自其所属进程的资源)线程组之间只能共享资源
- 一个进程崩溃后,在保护模式下不会对其他进程产生影响;一个线程崩溃整个进程都会死掉。所以多进程要比多线程健壮。
25、冒泡排序算法的时间复杂度是多少?
O(n^2)
26、文件data.txt中有一组整数,试设计一段C++代码,要求排序后输出到另一个文件result.txt中。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void Sort(vector<int> &data)
{
for(int i=1; i < data.size(); i++)
{
int tmp = data[i];
for(int j=i-1; j>=0 && tmp < data[j]; j--)
data[j+1] = data[j];
data[j+1] = tmp;
}
}
int main()
{
void Sort(vector<int> &data);
ifstream in("data.txt");
if(!in)
{
cout << "file error" << endl;
exit(1);
}
int tmp;
vector<int> data;
while(!in.eof())
{
in>>tmp;
data.push_back(tmp);
}
Sort(data);
ofstream out("result.txt");
if(!out)
{
cout << "file error!" << endl;
exit(1);
}
for(vector<int>::iterator it=data.begin(); it != data.end(); it++)
out << *it << " ";
out.close();
return 0;
}
被老师背刺了,呜呜呜一道题没考,他真的,我哭死......