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...

面试题 相关文章推荐
SQL中where和having的区别
Jun 17 面试题
说出一些常用的类,包,接口
Sep 22 面试题
什么是Deployment descriptors;都有什么类型的部署描述符
Jul 28 面试题
DBA的职责都有哪些
May 16 面试题
Internet主要有哪些网络群组成
Dec 24 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
Mar 27 面试题
网络工程师面试(三木通信技术有限公司)
Jun 05 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
Mar 23 面试题
什么时候用assert
May 08 面试题
设置器与访问器的定义以及各自特点
Jan 08 面试题
UNIX文件类型
Aug 29 面试题
Ruby如何进行文件操作
Jul 17 面试题
字符串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 数据库树的遍历方法
2009/02/06 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
ThinkPHP模型详解
2015/07/27 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
js自定义事件代码说明
2011/01/31 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
python正则分组的应用
2013/11/10 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
python实现杨辉三角思路
2017/07/14 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
小学生考试获奖感言
2014/01/30 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python