C++期末复习

一、判断题

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的区别?

  1. 成员的默认访问:struct的成员默认是公开的,class的成员默认是私有的。
  2. 默认的继承方式:struct默认以public继承,class默认以private继承。
  3. class和typename还可以用于定义模版参数,struct不可以。

(2)在什么情况下,程序设计二者使用在功能上是相当?

  1. 都可以定义一个类
  2. 在c++中兼容c语言,所以c++中struct 可以当成结构体去使用
  3. 俩者可以有成员变量,可以有成员函数,也可以定义public,private,protected数据成员
  4. 结构体定义之后,可以像类一样用结构体名来创建对象
  5. 俩者都可以继承或者被继承,也可以有虚函数

21、数组与指针的区别?(限50字以内)
如下代码,sizeof(a)输出为多少字节? sizeof(p)输出为多少字节?

char a[] = "hello world";

char *p = a;

cout<< sizeof(a) << endl;

cout<< sizeof(p) << endl;

答:

  1. 存储方式:数组在内存中是连续存放的,在静态区或者在栈开辟一块连续的内存空间。而指针是指向一块内存区域,但指针的存储空间不能确定。
  2. 赋值:同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝。数组地址和容量在生命周期里不会改变,只有数组的内容可以改变;而指针却不同,他指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,他的内容是不可以被修改的。

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字以内)(地址空间、开销、并发性、内存标准)

进程和线程主要的区别是他们是不同的操作系统资源管理方式。

  1. 进程有独立的地址空间;线程有自己的堆栈和局部变量,但是线程之间没有独立的地址空间
  2. 进程和线程切换时,需要切换进程和线程的上下文,进程的上下文切换时间开销要远远大于线程的上下文切换时间,耗费资源较大,效率要差一点
  3. 进程的并发性较低;线程的并发性较高并发性和并行性区别到底是什么? - 知乎 (zhihu.com)
  4. 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口;但是,线程不能独立执行,必须依存在应用程序中,由应用程序来提供多个线程执行控制
  5. 系统在运行的时候会为每个进程分配不同的内存空间;但是线程,除了CPU外,系统不会为线程分配内存空间(线程所使用的资源来自其所属进程的资源)线程组之间只能共享资源
  6. 一个进程崩溃后,在保护模式下不会对其他进程产生影响;一个线程崩溃整个进程都会死掉。所以多进程要比多线程健壮

25、冒泡排序算法的时间复杂度是多少?
O(n^2)


26、文件data.txt中有一组整数,试设计一段C++代码,要求排序后输出到另一个文件result.txt中。
 

#include 
#include 
#include 
using namespace std;

void Sort(vector &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 &data);
 
	ifstream in("data.txt");
	if(!in)
	{
		cout << "file error" << endl;
		exit(1);
	}
 
	int tmp;
	vector 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::iterator it=data.begin(); it != data.end(); it++)
		out << *it << " ";
 
	out.close();
	return 0;
}

被老师背刺了,呜呜呜一道题没考,他真的,我哭死......

你可能感兴趣的:(c++,开发语言)