程序员面试宝典3TH-ch7.2
下列程序的输出结果是什么?
#include "stdafx.h" #include <iostream>
using namespace std; class A
{
public:
int _a;
A()
{
_a = ;
}
void print()
{
cout << _a << endl;
}
};
class B : public A
{
public:
int _a;
B()
{
_a = ;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B b;
b.print();
cout<<b._a<<endl;
system("pause");
return ;
}
结果:

一开始很容易会误以为是22
首先,我们来看一下什么时候,输出会是22呢?
只要把B中_a定义这一行注释掉,就会是22了,至于为什么,对于一开始以为答案是22的朋友,显而易见。
那么为什么题中会是12呢?
我们可以将A,B两个类的大小(对象大小)输出:
int _tmain(int argc, _TCHAR* argv[])
{
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl; B b;
b.print();
cout<<b._a<<endl;
system("pause");
return ;
}

可以看到,B的大小是A的2倍,这是因为在B中有两个int型变量:
A::_a
B::_a
如果我们在开始的地方加上断点调试就会发现,在B类实例初始化的时候,首先会把A::_a赋值为1,然后把B::_a赋值为2,而当执行print的时候,实际上是进入A中:

所以输出的当然是A::_a,实际上,如果把B中,定义_a的一行去掉,依然输出的是A::_a,如果想要输出B::_a,只有在B中增加print(),才行,而且此时输出的就会是22。
还有一题:
这个是从http://bbs.csdn.net/topics/330161711这里copy的,不过讲的挺好的
struct S
{
int i;
int *p;
}; main()
{
S s;
int *p = &s.i;
p[] = ; //把i的值改为4
p[] = ;//这个地方越界写了,把保存在int i下面的指针int* p的值给写为3了
s.p = p; //又把这个结构体s中指针p的值赋为上面int i的地址
s.p[] = ;//i下面的指针指向i的地址,现在把自身修改为1了
s.p[] = ;//再访问内容为1的指针所指空间就出错了,这行崩溃了
}
程序员面试宝典3TH-ch7.2的更多相关文章
- Android高薪之路-Android程序员面试宝典
Android高薪之路-Android程序员面试宝典
- ASP.NET的几个试题(《C#与.NET程序员面试宝典》)
更多参考:博客园笔记 :ASP.NET是什么 ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和 ...
- 《JAVA 程序员面试宝典(第四版)》读书笔记之前言
工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过 ...
- 黑马程序员面试宝典(Java)Beta6.0免费下载
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
- JAVA程序员面试宝典
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...
- [Java程序员面试宝典]读书笔记
ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动 ...
- 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念
1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...
- net 程序员面试宝典
第1部分 求职过程 ------------------------------------------------------------------------------------------ ...
- java程序员面试宝典之——Java 基础部分(1~10)
基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包 ...
- Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)
(该博文为原创,转载请注明出处 http://www.cnblogs.com/luyijoy/ by白手伊凡) 1. 基本概念 1) Java为解释性语言,运行过程:程序源 ...
随机推荐
- (一二三)基于GCD的dispatch_once实现单例设计
要实现单例,关键是要保证类的alloc和init只被调用一次,并且被自身强引用防止释放. 近日读唐巧先生的<iOS开发进阶>,受益匪浅,通过GCD实现单例就是收获之一,下面把这个方法与大家 ...
- UNIX环境高级编程——标准IO-实现查看所有用户
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h&g ...
- 没想到你是这样的UDP
UDP是国际标准化组织为互联网设定的标准中的传输层中的一个协议.TCP/IP协议簇是一个很庞大的家族,但是今天我们就来看一看这个面向无连接的传输层在Java中是怎样通过编程实现的. 原理性知识 在Ja ...
- linux目录间的瞬间转移:dtags
http://blog.csdn.net/pipisorry/article/details/50923957 linux下dtags的安装 apt-get install python3-pip # ...
- android studio——Failed to set up SDK
最近使用android studio ,在IDE里面使用Gradle构建的时候,一直出现构建失败,失败信息显示Failed to set up SDK.然后 提示无法找到andriod-14平台,我更 ...
- 初识WCF之使用配置文件部署WCF应用程序
二月份的开头,小编依旧继续着项目开发之路,开始接触全新的知识,EF,WCF,MVC等,今天小编来简单的总结一下有关于WCF的基础知识,学习之前,小编自己给自己提了两个问题,WCF是什么?WCF能用来做 ...
- struts2国际化全例 错误解决
在struts2中需要做国际化的有: jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化 在之前的例子中已经做过和国际化相关的例子了,在struts.xml中 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...
- pyinstaller相关错误
http://blog.csdn.net/pipisorry/article/details/50620495 目录结构 将主文件testMain.py转换成exe可执行文件 主文件调用了自定义包 ...
- SWING中文件的上传
<pre name="code" class="java">import java.io.File; import java.io.FileInpu ...