1.8 习题

一、常见的面试题

1.你认为C++和Java的区别在哪里?

【解析】本题考查的是两种主流面向对象编程语言的区别,题目较简单,发挥的余地较大。

【参考答案】

(1)速度方面,C++比Java快20倍,对于小应用程序,只需要根据需要选择语言即可,而对于大型应用程序,绝大多数软件厂商都选择使用C++。

(2)Java是C++语言衍生出来的面向对象语言,任何对象、变量都封装在类里面。而C++则具有面向过程和面向对象的双重特性。

(3)Java没有指针类型,但如果需要,也是静态指针,这对于大多数具有大型项目经验的程序员来说是不大习惯的。

(4)都具有构造函数,但Java没有析构函数。

(5)Java没有多继承机制,这样可以降低程序员编程出错概率,但代价是丧失了面向对象的灵活性。

2.你最熟悉的C++集成开发环境是什么?请简述其从源代码到执行文件的转化过程。

【解析】本题主要考查应聘者有没有相关的开发经验,比较简单,有基本的经验即可做出较好的回答。

【参考答案】我较熟悉的是Visual C++ 6.0集成开发环境。源代码有两种:程序源代码和资源源代码。当程序员将源代码编写好后,由编译器分别编译各源代码文件,生成中间文件,然后通过连接器将各中间文件和系统调用的模块连接起来,并生成执行文件。

3.写一个最简单的C++程序,要求打印“Hello,C++!”字符串,并尽可能详细解释每行程序。

【解析】本题虽然简单,但很容易从简单程序中看出一个人的C++编程理论基础。

【参考答案】

1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5   cout<<"Hello,C++!";
6   cin.get();
7   return 0;
8 }

第1行:#include <iostream>表示“main.cpp”源文件可以使用输入/输出流所定义的对象、变量等。

第2行:using namespace std;在此声明以下的同一个源文件内,都可以使用std名称空间中的内容,这也是C++ 98标准后的一项防止标准变量和用户定义变量冲突的一种方法。

第3行:int main()是C++程序的入口,该入口是一个函数,这个函数的返回值是int类型,而该函数的调用主体就是操作系统,当操作系统调用该函数后,得到一个为“0”的返回值后(第7行return 0),操作系统就知道该程序是正常退出了。

第5行:cout<<"Hello,C++!";就是运行结果的输出语句,cout是在“iostream”头文件中定义的一个输出流对象,该对象有一个重载方法“<<”,而该重载方法接收的参数为“Hello,C++!”字符串。“<<”运算符本来的功能是向左移位操作,在cout对象中使用的是输出重载功能,其调用就相当于cout.operator<<("Hello,C++!");。

第6行:cin.get();是用户为了防止打印程序窗口过快消失而设置的,cin是输入流对象,这里调用了该对象的get()成员函数,用于接收一个用户输入,接收之后,程序很快就返回操作系统并退出。

注:该题非常简单,但重点在于程序的解释,一个人的编程语言理论水平可以从解释看出来。

4.以下4行代码在Visual C++ 6.0环境中有何区别?

#include <iostream>
#include "iostream"
#include <iostream.h>
#include "iostream.h"

【解析】本题考查的是应聘者对C++新标准的理解和C++旧标准的经验,如果没有相关的知识储备,则不可能回答好。

【参考答案】4行代码都是包含输入/输出流文件,不同点在于:

(1)<>尖括号表示让预编译器直接搜索系统指定的头文件目录,而""(双引号)号表示让预编译器先搜索与本源码同目录的头文件,如果没有,再到系统指定的头文件目录寻找该头文件。

(2)有没有“.h”的区别在于C++语言语法的新旧标准不同,新的语法标准是系统默认头文件不用写“.h”,但同时也兼容旧标准。因此,如果集成开发环境遵照新标准,则可写,也可不写,如果遵照旧标准,则一定要写。

二、简答题

1.简要说出Visual C++中各系统菜单的主要功能。

2.MFC AppWizard的作用是什么?

3.ClassWizard的作用是什么?

三、编程题

设计一个C++终端应用程序,使其运行时输出“Welcome to 21 Visual C++”的字样,如图1-24所示。

图1-24 运行结果

四、综合练习

1.新建一个Win32应用程序的工程Test,在其中添加一个C++ Source File,掌握应用程序编辑、编译、链接和运行的实现和过程,该工程并不实现任何功能。

操作步骤如下。

1 打开Visual C++ 6.0应用程序,单击【文件】|【新建】菜单项,打开【新建】对话框。

2 选择【工程】选项卡,选中其中的【Win32 Console Application】选项,输入工程名,选择输入该工程的位置。

3 单击【OK】按钮后进入【Win32 Console Application】对话框,选择【An empty project】选项,如图1-25所示。

图1-25 新建Win32应用程序

4 单击【Finish】按钮,完成向导。

5 添加C++ Source File文件,如图1-26所示。

图1-26 添加C++ Source File文件

6 编译、链接应用程序。

7 运行应用程序,如图1-27所示。

图1-27 运行Win32应用程序

提示

在图1-25中,如果没有选择【An empty project】选项,而是选择【A simple application】选项,则会新建一个含有默认C++源文件的工程。

2.编写一个简单的应用程序,要求其实现的功能为:用户输入两个数,可得到两数之和。操作步骤如下。

1 打开Visual C++ 6.0应用程序,单击【文件】|【新建】菜单项,打开【新建】对话框。

2 选择【工程】选项卡,选择其中的【Win32 Console Application】选项,输入工程名,选择输入该工程的位置。

3 单击【OK】按钮后进入【Win32 Console Application】对话框,选择【A simple application】选项建立一个工程,如图1-28所示。

图1-28 新建Win32应用程序

4 单击【Finish】按钮,完成向导。

5 在集成开发环境的工作区中可看到该工程的文件视图,打开其中的Source File树形结构,可看到Visual C++ 6.0默认生成的sum.app文件,如图1-29所示。

图1-29 树形结构

双击打开该文件,可看到Visual C++自动生成的代码,如图1-30所示。

图1-30 自动生成的代码

6 双击打开sum.app文件,在其中输入代码,如图1-31所示。

图1-31 添加代码

7 编译运行该应用程序,其结果如图1-32所示。

图1-32 运行结果

提示

在该练习中使用的是Visual C++自动生成的源文件,因此需要在工作区中将其打开,并添加相应的代码。