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

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

程序猿面试宝典笔记(二)预处理、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. 轻松编写 C++ 单元测试

    单元测试概述 测试并不只是测试工程师的责任,对于开发工程师,为了保证发布给测试环节的代码具有足够好的质量( Quality ),为所编写的功能代码编写适量的单元测试是十分必要的. 单元测试( Unit ...

  2. android简单的答题游戏

    笔者最近开始沦陷于android,从开始入门到现在已经快半个月的时间,于是便写一个较综合,用到了数据库,多线程操作,以及时钟的添加和停止消除,activity之间的动画转换等,适用于初学者学以致用的小 ...

  3. 批量修改mp3文件的title等

    批量修改mp3文件的title等 不是改文件名哦: 下载地址:https://mp3tag.en.softonic.com/ 帮助文档:file:///C:/Program%20Files%20(x8 ...

  4. dubbo-monitor安装监控中心,管理控制台安装网页一直访问不到,解决bug的方式记录

    问题再现 第一步,重启机器 第二步,按照dubbo-monitor需要开启的服务,顺序逐一进行启动,之前的推翻全部重新再走一遍就通了,千万不能死磕...很浪费时间.... 通过打印日志追踪问题的所在. ...

  5. Adobe Acrobat Pro 11安装激活

    运行keygen.exe,点击"generate"一次,生成一个序列号(在安装过程中需要填写序列号). 断网,打开软件,直到出现以下界面,点击蓝色字体"连接Interne ...

  6. JMeter 二:执行顺序 & 支持的协议

    执行顺序 参考:http://jmeter.apache.org/usermanual/test_plan.html#executionorder 不同种类元素之间,执行顺序如下: Configura ...

  7. vue - static(.gitkeep)

    描述:git上传忽略的文件,与.gitnoignore一样.

  8. 【一步一步走(1)】远程桌面软件VNC的安装与配置

    近期在VPS上搭建Python Web环境.走了非常多弯路,借此记下. 先说说购买的VPS(PhotonVPS),我可不是打广告.仅仅是感觉这个VPS服务提供商还不错推荐给你大家,我之前也是体验过阿里 ...

  9. logback 配置解析

    http://www.cnblogs.com/cb0327/p/5759441.html 正文 回到顶部 1.根节点<configuration>包含的属性 scan: 当此属性设置为tr ...

  10. sharepoint admin svc must be running in order to create deployment timer job 若要创建计时器作业,必须执行SVC

    sharepoint admin svc must be running in order to create deployment timer job 若要创建计时器作业.必须执行SVC       ...