C和C++经典笔试题附答案解析


Posted in 面试题 onAugust 18, 2014
1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。
答案:#define SECONDS_PER_YEAR(60*60*24*365)UL
应该意识到表达式将使一个16位机的整形数溢出,因此要用到长整型符号L,表达式中UL表示无符号长整型。

2. 写一个“标准”宏MIN,这个宏输入连个参数并返回较小的一个。
答案:#define MIN(A,B) ((A)
3. sizeof 的一些考察
char* ss1=”0123456789”; char ss2[]=”0123456789”; char ss3[100]=”0123456789”;
int ss4[100]; char q1[]=”abc”; char q2[]=”a\n”; char* q3=”a\n”;
答案:ss1是一个字符指针,指针的大小是一个确定的值,就是4,sizeof(ss1)=4;
ss2是一个字符数组,这个数组最初的大小未定,填充值是“0123456789”,一个字符占一位,再加上隐含的“\0”一共是11位。
ss3是一个字符数组,这个数组开始预分配100,所以它的大小是100位。
ss4是一个整型数组,但是每个整型变量所占空间是4,所以它的大小一共是400位。
q1与ss2类似,占4位。Q2里面有一个“\n”,“\n”算作一位,加上隐含的,大小一共是3位。Q3是一个字符指针,指针得大小是一个定值,就是4.
4. What is the output of the following code?
#include
using namespace std;
class A {};
class A2 {char d,e;};
struct B{};
struct C{ char x,y;};
struct D{int x,y;};
main()
{
cout cout A *p1=new A();
A p2;
A*p3;
cout cout cout cout cout cout return 0;
}
答案:对于一个类而言,即便它是一个空的类,编译器仍然要要给它一个空间,所以类A即便什么也没有,它的空间大小依然为1,而类A2大小是类中连个字符d,e之和,所以它的空间大小依然是2,至于p1,p2,p3,p1和p3是指针,大小是一致的,而且是定值,为4,p2是A的对象,所以它的大小和类A相等,为1,B和C得解释同A和A2,至于D,它和C不同点在于,结构体有两个整型变量,每个整型变量所占空间为4,所以D所占空间大小为8。
最后结果是 1, 2,4, 1,4,1,2,8
5. what is the output the following code?
#include using namespace std;
class A1 { public: int a; static int b;A1(); ~A1();}; 4
class A2 { public: int a; char c; A2(); ~A2();}; 8
class A3 { public: float a; char c; A3(); ~A3();}; 8
class A4 { public: float a; int b; char c; A4(); ~A4();}; 12
class A5 { public: double d; float a; int b; char c; A5(); ~A5();} 24
int main() { cout 答案:因为静态变量是存放在全局数据区的,sizeof计算栈中分配的大小,是不会计算在内的,所以sizeof(A1)是4;为了照顾数据对其,int大小为4,char大小为1,所以sizeof(A2)是8;为了照顾数据对其,float大小为4,char大小为1,所以sizeof(A3)为8;为了照顾数据对其,float大小为4,int大小为4,char大小为1,所以sizeof(A4)为12;为了照顾数据对其,double大小为8,float大小为4,int大小为4,char大小为1,所以sizeof(A5)为24。

6. 以下代码的输出结果是()
char var[]
Int test(char var[]){ retrun sizeof(var);}
答案:因为var[]等价于*var,已经退化成一个指针了,所以大小是4.

7. 以下代码的输出结果是()
Class B { float f; char p; int asf[3];}; cout 答案:float f占了4个字节,char p占了一个字节,int adf[3]占了12个字节,总共是17个,根据内存的对齐原则,要选择4的倍数,是20个字节。

8. 以下代码的输出结果是()
Class B { double d; char p; int asf[4];}; cout 答案:double d占了8个字节,char p占了一个字节,int adf[4]占了16个字节,总共是25个,根据内存的对齐原则,要选择8的倍数,是32个字节。

9. 一个空类所占空间为1,多重继承的空类所占的空间还是1,但是虚继承涉及到虚表(虚指针),所以虚继承的空类占的空间为4
10. this指针是在实例化一个对象后产生的,并且指向对象本身.比如实例化一个对象pt,那么this=&pt;用”&”取地址符来取对象的地址.同样,如果定义对象pt这个类中,有一个public变量x,那么就可以用this->x=0来定义x的值,等同于pt.x=0.

11. #include using namespace std;
Void GetMemory(int *z) { *z=5; }
Int main() { int v; GetMemory(&v); cout Getmory把v的地址传了过来,*z是地址里的值,是v的副本.通过直接修改地址里的值,不需要有返回值,也把v给修改了,因为v所指向地址的值发生了改变,最终程序会崩溃.

12. 下面的数据声明都代表什么意思?
(1)float(**def)[10]
Def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float。
(2)double*(*gh)[10]
Gh是一个指针,它指向一个一维数组,该数组元素都是double*
(3) double(*f[10])()
F是一个数组,f有十个元素,元素都是函数的指针,指向的函数类型是没有参数且返回double的函数
(4)int*((*b)[10])
就跟“int*(b)[10]”是一样的,b是一维数组的指针
(5)long(*fun)(int)
函数指针
(6)int(*(*f)(int,int))(int)
F是一个函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函数,返回的函数指针指向一个int参数且返回int的函数。
13. 指针数组与数组指针
指针数组,是指一个数组里面装着指针,数组指针,代表它是指针,指向真个数组
一个指向整型数组的指针定义为()
A. int(*ptr)[] B.int *ptr[] C.int*(ptr[]) D.int ptr[]
int(*ptr)[]是以一个指向整型数组的指针
int *ptr[]是指针数组,ptr[]里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因为里面没有相应的地址
int*(ptr[])与B相同
14. 用变量a给出下面的定义
(1)一个整型数
(2)一个指向整形数的指针
(3)一个指向指针的指针,它指向的指针是一个整型数
(4)一个有10个整型数的数组
(5)一个有10个指针的数组,该指针是指向一个整型数的
(6)一个指向有10个整型数组的指针
(7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数
(8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整数
Itn a; int *a; int **a; int a[10]; int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int)

15.C++中的空类默认产生那些类成员函数?
Class Empty
{ public:
};
答案:对于一个空类,编译器默认产生4个成员函数:默认构造函数,析构函数,拷贝构造函数和赋值函数
16.那一种成员变量可以在同一个类的实例之间共享?
答案:必须使用静态成员变量在一个类的所有实例间共享数据.如果想限制对静态成员变量的访问,则必须把他们声明成保护型或私有型.不允许使用静态成员变量去存放一个对象的数据。静态成员数据是在这个类的所有对象间共享的。
静态数据成员:静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。节省内存;提高时间效率。使用静态数据成员可以因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,
  1、静态数据成员在定义或说明时前面加关键字static。
  2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:
    ::=
  这表明:
(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
  (2) 初始化时不加该成员的访问权限控制符private,public等。
  (3) 初始化时使用作用域运算符来标明它所属类,静态数据成员是类的成员,而不是对象的成员。
  3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。
  4、引用静态数据成员时,采用如下格式:
   ::
  静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。
  下面举一例子,说明静态数据成员的应用:
#include
class Myclass
{
public:
Myclass(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};
int Myclass::Sum = 0;
Myclass::Myclass(int a, int b, int c)
{
A = a;
B = b;
C = c;
Sum += A+B+C;
}
void Myclass::GetNumber()
{
cout void Myclass::GetSum()
{
cout }
void main()
{
Myclass M(3, 7, 10),N(14, 9, 11);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}

  从输出结果可以看到Sum的值对M对象和对N对象都是相等的。这是因为在初始化M对象时,将M对象的三个int型数据成员的值求和后赋给了Sum,于是Sum保存了该值。在初始化N对象时,对将N对象的三个int型数据成员的值求和后又加到Sum已有的值上,于是Sum将保存另后的值。所以,不论是通过对象M还是通过对象N来引用的值都是一样的,即为54。
  静态成员函数
  静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。
  在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。下面通过例子来说明这一点。
#include
class M
{
public:
M(int a) { A=a; B+=a;}
static void f1(M m);
private:
int A;
static int B;
};
void M::f1(M m)
{
cout cout }
int M::B=0;
void main()
{
M P(5),Q(10);
M::f1(P); file://调用时不用对象名
M::f1(Q);
}

  读者可以自行分析其结果。从中可看出,调用静态成员函数使用如下格式:
   ::();
17.判断选择
1. C++语言没有可移植性。 B不正确

2. 定义数组时可以不确定元素个数。 B不正确

3. 指针是一种特殊的变量,只能用来保存地址。 A正确

4. 通过引用或者指针调用对象的成员函数时,如果引用或者指针的类型跟对象的类型不一致时,能自动正确调用对象所属的类中对这个函数的定义。 B不正确

5.类myclass,为myclass类对象以成员函数形式重载后++运算符的声明应该为 C myclass operator++( int );
A. myclass operator++();
B. myclass& operator++();
C. D. myclass& operator++( int );
5. 父类和子类各自定义一个成员函数,函数名相同,参数表不同,那么 C子类中的函数会覆盖父类中的函数。 函数同名,通通覆盖,不同层次的函数不能重载
6. 如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句
myclass obj = 100;会 B调用整型参数的构造函数。等价于 myclass obj = myclass(100)

7. 抽象类指的是 D有纯虚函数的类
8. 多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 C派生类
的构造函数来传递。

9. 多态性是通过 C虚函数 实现的。
10. 如果有如下语句
char str[20];
cin >> str;
cout 执行时输入的是“this is a test line!”,则输出的内容是 D 。
A. this is a test line!
B. this is a test line
C. this is a test
D. this

11. 执行语句
char ch[] = “Hello”;
char * p = &ch[0];
cout 结果是输出 C 。Hello

18.以下生面是否正确?
Class A{ const int size=0;};
答案:常量必须在构造函数的初始化列表里面初始化或者将其设置为static
正确的程序如下:
Class A
{ A(){ const int size=0; }};
或者:
Class A
{ static const int size=0; };

Tags in this post...

面试题 相关文章推荐
面向对象编程OOP的优点
Jan 22 面试题
利用指针变量实现队列的入队操作
Apr 07 面试题
利用异或运算实现两个无符号数的加法运算
Dec 20 面试题
上海奥佳笔试题面试题
Nov 16 面试题
杭州SQL浙江浙大网新恩普软件有限公司
Jul 27 面试题
一道SQL面试题
Dec 31 面试题
为什么group by 和order by会使查询变慢
May 16 面试题
linux面试题参考答案(9)
Jan 07 面试题
Linux管理员面试题 Linux admin interview questions
Nov 01 面试题
广州喜创信息技术有限公司JAVA软件工程师笔试题
Oct 17 面试题
如何从一个文件档案的尾端新增记录
Dec 02 面试题
servlet面试题
Aug 20 面试题
字符串str除首尾字符外的其他字符按升序排列
Mar 08 #面试题
聚网科技C++面试笔试题
Sep 01 #面试题
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
Sep 05 #面试题
下述程序的作用是计算机数组中的最大元素值及其下标
Nov 26 #面试题
一套C++笔试题面试题
Jun 06 #面试题
腾讯技术类校园招聘笔试试题
May 06 #面试题
RealTek面试题
Jun 28 #面试题
You might like
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
List Installed Software Features
2007/06/11 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
jquery实现倒计时小应用
2017/09/19 jQuery
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
vue 全局环境切换问题
2019/10/27 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
python多维数组分位数的求取方式
2020/03/03 Python
Python如何操作docker redis过程解析
2020/08/10 Python
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
物业管理求职自荐信
2013/09/25 职场文书
称象教学反思
2014/02/03 职场文书
投标担保书范文
2014/04/02 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
孔庙导游词
2015/02/04 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
清明节随笔
2015/08/15 职场文书
python 模块重载的五种方法
2021/04/24 Python
Python制作表白爱心合集
2022/01/22 Python