C++面试笔试技术篇

1.1 程序的编译和执行

1.1.1 简述#include <>和#include " "的区别

	#include <> 直接从编译器指定路径处搜索;  系统提供的头文件推荐使用#include <>这种方式引入。。
	#include “” 首先在程序当前目录中进行搜索,然后再从编译器指定的路径处搜索;用户自定义的头文件
				必须使用#include“”。。

1.1.2 简述#与##在define中的作用

	宏定义中的#运算符将其后面的参数转换成字符串;
	宏定义中的##运算符将前后的参数进行字符串连接。

1.1.3 简述assert断言的概念

	assert是一个带参数的宏,并非一个函数,可以在assert.h找到assert宏的定义。
	最好在每个assert中只检测一个条件,不要在assert中修改变量的值,因为assert只在DEBUG版本中起作用,
	一旦使用了RELEASE版本,所有的assert都会被忽略,在assert内部变量的修改也随之失效,会造成同一变量
	在不同程序版本中的取值不同。
	assert用于在程序中的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序运行。

1.2 变量

1.2.1 简述i++和++i的区别

	i++是先赋值后加一,而++i先加一后赋值。

1.2.2 简述C++的类型转换操作符

	c++中提供了四种类型转换操作符:static_cast、dynamic_cast、const_cast和reinterpret_cast.
	static_cast 可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针,但是如果两个类是不相关的
	,则无法相互转换。
	dynamic_cast 只能用于对象指针之间的类型转换,可以将父类指针转换为子类指针,也可以将子类指针转换成
	父类指针,此外转换结果也是可以引用的。
	const_cast 可以在转换的过程中增加或删除const属性。一般情况下,无法将常量指针直接赋值给普通指针,
	但是可以通过const_cast 可以移除常量指针的const属性,实线const指针到非const指针的转换。
	reinterpret_cast 可以将一种类型的指针转换成另一种类型的指针,不论两个类型之间是否有继承关系。此外
	reinterpret_cast 可以把一个指针转换成一个整数,也可把一个整数转换成一个指针。
	reinterpret_cast还经常用在不同函数指针之间的转换。

1.2.3 简述静态全局变量的概念

	在全局变量前加上static关键字,就定义了一个静态全局变量。
	静态全局变量的作用域仅限于定义静态全局变量所在的文件内部,普通全局变量的作用域是整个工程。
	如果在头文件中声明静态全局变量,静态全局变量在声明的同时会被初始化,如果静态全局变量没有显示地初始
	化则会被初始化为默认值,相当于在头文件中同时完成声明和定义,而普通全局变量不能直接定义在头文件中。

1.3 条件语句和循环语句

1.3.1 不使用break的switch语句

	公司年底会给员工发一条关于年终奖的短信,奖品根据员工年度绩效考评结果而定,具体见表。请编写一个函数,
输入为员工年度考评结果,输出为短信内容,短信中需要罗列员工所获得的所有奖品。
考评结果 年终奖品
优秀A 英国或美国十日游、五千元超市卡、两千元亚马逊卡、一个月奖金
优秀B 五千元超市卡、两千元亚马逊卡、一个月奖金
及格C 两千元亚马逊卡、一个月奖金
未达标D 一个月奖金

代码如下

string  getMessage(char mamrk){
	string message = "Your year award: ";
	switch (mark){
	case "A": message.append("10 day trip in USA or UK,");
	case "B": message.append("5k shopping card of supermarket,");
	case "C": message.append("2k coupon of Amazon,");
	default : message.append("one month extra salary.");
	}
	return message;
}
	例如,员工的年度考评结果是B,第一个分支case ‘A’不满足条件,因此不执行;第二个分支case'B'满足条件,
后面的语句会执行,由于没有break语句,之后所有分支的语句都会执行,也就是下面的三行代码都会执行:	
	message.append("5k shopping card of supermarket,");
	message.append("2k coupon of Amazon,");
	message.append("one month extra salary.");

1.3.2 for循环的三要素

	写出下面程序的输出结果:    程序输出ABDCBDCB
	bool foo(char c){
	cout<<c;
	reeturn true;
	}

	int main(){
		int i = 0;
		for(foo('A');foo('B')&&(i++ < 2);foo('C')){
			foo('D')
		}
		getchar();
	}
	
	//等价的while语句:
	foo('A');
	while(foo('B')&&(i++ < 2)){
	foo('D');
	foo('C');
	}

1.3.3 巧打乘法口诀表

	编写一个函数,接受一个整型参数n表示输出规模
	打印乘法表最简单的方法就是二重循环,外层对行做循环,内层对列做循环,循环体内只打印乘法口诀中的一项,
	如 5*3=15  代码如
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值