所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~

程序猿面试宝典笔记(一)基本概念

程序猿面试宝典笔记(二)预处理、const和sizeof

程序猿面试宝典笔记(三)auto_ptr、递归

程序猿面试宝典笔记(四)面向对象、类型转换、static

程序猿面试宝典笔记(五)数据结构基础

程序猿面试宝典笔记(六)软件測试

题目

写一个“标准”宏MIN。这个宏输入两个參数并返回较小的一个。

解析

为什么要把如此简单的题目也放进来呢?为了强调宏定义里面括号的重要性!

。!

答案

#define MIN(A,B) ((A) <= (B) ? (A) : (B))

题目

const与指针的关系?const成员函数?以及mutable!

解析

一般分为4种情况:

int b = 500;
const int* a = &b;
int const* a = &b;
int* const a = &b;
const int* const a = &b;

答案

1)先看情况1。假设const位于星号的左側,则const就是用来修饰指针所指向的变量,即指针指向为常量。假设const位于星号的右側。const就是修饰指针本身。即指针本身是常量。

因此,1和2的情况同样,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这样的情况下不同意对内容进行更改操作。

对于情况1。能够先不进行初始化。

由于尽管指针内容是常量。但指针本身不是常量。

2)情况2与情况1同样。

3)情况3为指针本身是常量。这样的情况下不能对指针本身进行更改操作,而指针所指向的内容不是常量。

对于情况3,定义时必须同一时候初始化。

4)对于情况4为指针本身和指向的内容均为常量。

以下再说一下const成员函数是什么?

我们定义的类的成员函数中。经常有一些成员函数不改变类的数据成员,也就是说。这些函数是“仅仅读”函数。而有一些函数要改动类数据成员的值。

假设把不改变数据成员的函数都加上const关键字进行标识。显然。可提高程序的可读性。事实上,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图改动数据成员的值,则编译器按错误处理。

在const成员函数中。用mutable修饰成员变量名后,就能够突破const的限制,改动类的成员变量了。

题目

const与#define相比有什么不同?

答案

C++语言能够用const定义常量,也能够用#define定义常量,可是前者比后者有很多其它的长处:

● const常量有数据类型。而宏常量没有数据类型。编译器能够对前者进行类型安全检查,而对后者仅仅进行字符替换,没有类型安全检查。而且在字符替换中可能会产生意料不到的错误(边际效应)。

● 有些集成化的调试工具能够对const常量进行调试,可是不能对宏常量进行调试。

在C++程序中仅仅使用const常量而不使用宏常量,即const常量全然代替宏常量。

题目

以下两段程序分别输出什么?

代码一

#include <iostream>

using namespace std;

class A
{
private:
bool a;
int b;
bool c;
}; class B
{
private:
int b;
bool a;
bool c;
}; int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
return 0;
}

代码二

#include <iostream>

using namespace std;

#pragma pack(1)
class A
{
private:
static bool a;
int b;
bool c;
}; class B
{
private:
int b;
bool a;
bool c;
}; int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
return 0;
}

解析

非常明显,这道题是考察结构的对齐。

一般来说。为了方便对结构体内元素的訪问和管理。结构体的长度一定是最长的数据元素的整数倍。

代码一类A的对齐为

|bool|—-|—-|—-|

|——–int———|

|bool|—-|—-|—-|

代码一类B的对齐为

|——–int———|

|bool|bool|—-|—-|

而代码二用pack预处理指令来禁止对齐调整。所以就是本身的内存大小。

可是须要注意sizeof是计算栈中分配的内存大小,静态变量是存放在全局数据区。不会被计算在内。

答案

代码一:类A 12字节;类B 8字节

代码二:类A 5字节;类B 6字节

GEEK学习笔记— —程序猿面试宝典笔记(二)的更多相关文章

  1. GEEK学习笔记— —程序猿面试宝典笔记(三)

    所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~ 程序猿面试宝典笔记(一)基本概念 程序猿面试宝典笔记(二)预处理.const和sizeof 程序猿面试宝典笔记(三)auto_ptr ...

  2. 程序员面试宝典 笔记(第六章 预处理 const 和sizeof())

    void main() { "; cout<< cout<< "; cout<< cout<<strlen(ss2)<< ...

  3. 《Java程序猿面试宝典》之字符串

    前不久刚看完这一章,然而这遗忘速度实在是不能忍,既然总是遗忘,那么老衲就和你磨上一磨. 1.字符串基础 先说字符串吧,看例1: String a = "abc"; String b ...

  4. 疯狂Java学习笔记(72)-----------大话程序猿面试

    大话程序猿面试 10个我最喜欢问程序猿的面试问题 程序猿面试不全然指南 10个经典的C语言面试基础算法及代码 程序猿的10大成功面试技巧 程序猿选择公司的8个标准 编程开发 8个值得关注的PHP安全函 ...

  5. 《JAVA 程序员面试宝典(第四版)》读书笔记之前言

    工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过 ...

  6. 《Java程序猿面试笔试宝典》之Java与C/C++有什么异同

    Java与C++都是面向对象语言,都使用了面向对象思想(比如封装.继承.多态等),因为面向对象有很多非常好的特性(继承.组合等),使得二者都有非常好的可重用性. 须要注意的是,二者并不是全然一样,以下 ...

  7. 《Java程序猿面试笔试宝典》之组合与继承有什么差别

    组合和继承是面向对象中两种代码复用的方式. 组合是指在新类里面创建原有类的对象,反复利用已有类的功能.继承是面向对象的主要特性之中的一个,它同意设计人员依据其他类的实现来定义一个类的实现. 组合和继承 ...

  8. 《Java程序猿面试笔试宝典》之Java程序初始化的顺序是如何的

    在Java语言中.当实例化对象时.对象所在类的全部成员变量首先要进行初始化,仅仅有当全部类成员完毕初始化后,才会调用对象所在类的构造函数创建对象.    Java程序的初始化一般遵循以下三个原则(以下 ...

  9. 《Java程序猿面试笔试宝典》之 什么是AOP

    AOP(Aspect-Oriented Programming.面向切面编程)是对面向对象开发的一种补充,它同意开发者在不改变原来模型的基础上动态地改动模型从而满足新的需求.比如.在不改变原来业务逻辑 ...

随机推荐

  1. 关于File.separator 文件路径:window与linux下路径问题(“No such file or diretory ”异常解决方案)

    最近有个在页面上传Excel文件至服务器指定目录并进行数据校验.最后入库及进行进一步处理的应用情境,我写好代码在模拟环境下测试,完全没问题:但客户试用的时候,却老是报告“No such file or ...

  2. g++ 静态库连接顺序的巨坑

    在编译最新版本(12.04)的alljoyn的chat示例的时候,想使用bundle daemon,依照在以前的经验修改文件:alljoyn-14.02.00-src/build/linux/x86_ ...

  3. 转: git的图文使用教程(巨详细)

    转自: http://blog.jobbole.com/78960/ Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集 ...

  4. [Functional Programming ADT] Adapt Redux Actions/Reducers for Use with the State ADT

    By using the State ADT to define how our application state transitions over time, we clear up the ne ...

  5. Java实现二维码技术探讨。

    Java生成二维码方法有三种: 1: 使用SwetakeQRCode在Java项目中生成二维码  http://swetake.com/qr/ 下载地址  或着http://sourceforge.j ...

  6. SQL如何将EXCEL导入到SQL数据库

    1 新建一个EXCEL工作表,注意默认有三个工作簿,我们只在Sheet1中创建几个字段并存储若干值保存为TEST.xls 2运行Excel to MySQL软件,注意Sourece和Destinati ...

  7. iOS_Objective-C測试

    1. iOS中程序正常载入UIViewControlle时,下面四个方法哪个最先运行? A.viewVillAppear B.viewDidLoad C.viewDidAppear D.viewWil ...

  8. 利用jspx解决jsp后缀被限制拿shell

    有些struts2的站在web.xml里面设置url是jsp的格式就自动跳转主页的action,转换jsp后缀大小写还不解析.查了查有Tomcat默认jspx可以解析.看了看jspx的手册,那就好说了 ...

  9. js实现页面跳转的两种方式

      CreateTime--2017年8月24日08:13:52Author:Marydon js实现页面跳转的两种方式 方式一: window.location.href = url 说明:我们常用 ...

  10. js操作当前窗口

      CreateTime--2017年7月21日09:58:34Author:Marydon js操作当前窗口 1.打开一个新的窗口(新的标签页) 实现方式:window.open(url) 实例一: ...