下列程序的输出结果是什么?

#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的更多相关文章

  1. Android高薪之路-Android程序员面试宝典

    Android高薪之路-Android程序员面试宝典

  2. ASP.NET的几个试题(《C#与.NET程序员面试宝典》)

    更多参考:博客园笔记 :ASP.NET是什么 ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和 ...

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

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

  4. 黑马程序员面试宝典(Java)Beta6.0免费下载

    场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...

  5. JAVA程序员面试宝典

    程序员面试之葵花宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...

  6. [Java程序员面试宝典]读书笔记

    ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动 ...

  7. 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念

    1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...

  8. net 程序员面试宝典

    第1部分 求职过程 ------------------------------------------------------------------------------------------ ...

  9. java程序员面试宝典之——Java 基础部分(1~10)

    基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包 ...

  10. Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)

    (该博文为原创,转载请注明出处   http://www.cnblogs.com/luyijoy/  by白手伊凡) 1.    基本概念 1)         Java为解释性语言,运行过程:程序源 ...

随机推荐

  1. 剑指Offer——美团内推+校招笔试题+知识点总结

    剑指Offer--美团内推+校招笔试题+知识点总结 前言 美团9.9内推笔试.9.11校招笔试,反正就是各种虐,笔试内容如下: 知识点:图的遍历(DFS.BFS).进程间通信.二叉查找树节点的删除及中 ...

  2. UNIX网络编程——原始套接字的魔力【下】

    可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发.提醒一点,在 ...

  3. Android初级教程:使用xml序列器

    之前备份短信的时候生成xml都是手动拼写的,有一个问题:当短信里面存在</body>这样的标签的时候,最后结果就不是完整的xml文件,显然出错.但是,今天使用序列化器的方式,就能有效的解决 ...

  4. Transform介绍(Unity3D开发之二)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=491 可能unity中接触较早的 ...

  5. Android初级教程理论知识(第九章多媒体编程)

    多媒体概念 文字.图片.音频.视频 计算机图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 单色图:每个像素占用1/8个字节 16色图:每个像素占用1/2个字节 256色图:每个像素 ...

  6. JEECG&Dubbo Demo

    jeecg框架service与dao层类图 吴水成Dubbo Demo项目架构图

  7. Hessian源码分析--HessianSkeleton

    HessianSkeleton是Hessian的服务端的核心,简单总结来说:HessianSkeleton根据客户端请求的链接,获取到需要执行的接口及实现类,对客户端发送过来的二进制数据进行反序列化, ...

  8. iOS中 加强日志输出 开发技术总结

    对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的B ...

  9. Java 8新特性探究(一) JEP126特性lambda表达式和默认方法

    Lambda语法 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.la ...

  10. OC第二天—封装

    /.锁定头文件的方法 1. 打开终端 2. 进入到Xcode的目录, 命令:   cd /Applications/Xcode.app 3. 把系统头文件修改为只读, 命令:   sudo chown ...