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

面试题 相关文章推荐
比较基础的php面试题及答案-编程题
Oct 14 面试题
PHP如何去执行一个SQL语句
Mar 05 面试题
介绍一下Java的安全机制
Jun 28 面试题
中软Java笔试题
Nov 11 面试题
华为慧通面试题
Sep 11 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
Oct 03 面试题
南京软件公司的.net程序员笔试题
Aug 31 面试题
深圳-东方伟业笔试部分
Feb 11 面试题
.NET remoting的两种通道是什么
May 31 面试题
How TDD works
Sep 30 面试题
How to spawning asynchronous work in J2EE
Aug 29 面试题
如何写出好的Java代码
Apr 25 面试题
字符串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
一个程序下载的管理程序(二)
2006/10/09 PHP
给初学PHP的5个入手程序
2006/11/23 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
ThinkPHP模型详解
2015/07/27 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
javascript 函数速查表
2010/02/07 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
大学生个人自荐信
2014/02/24 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
离职报告范文
2014/11/04 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
六一活动主持词
2015/06/30 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
如何通过cmd 连接阿里云服务器
2022/04/18 Servers