博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Cracking the Coding Interview》——第13章:C和C++——题目3
阅读量:5340 次
发布时间:2019-06-15

本文共 1548 字,大约阅读时间需要 5 分钟。

2014-04-25 19:42

题目:C++中虚函数的工作原理?

解法:虚函数表?细节呢?要是懂汇编我就能钻的再深点了。我试着写了点测大小、打印指针地址之类的代码,能起点管中窥豹的作用,从编译器的外部感受下虚函数表、虚函数指针的存在。

代码:

1 // 13.3 How does virtual function works in C++? 2 #include 
3 #include
4 using namespace std; 5 6 class A { 7 }; 8 9 class B {10 public:11 void f() {cout << "class B" << endl;};12 };13 14 class C {15 public:16 C();17 };18 19 class D {20 public:21 virtual void f() {22 cout << "class D" << endl;23 };24 };25 26 class E: public D {27 public:28 void f() {29 cout << "class E" << endl;30 };31 };32 33 int main()34 {35 D *ptr = new E();36 D d;37 E e;38 unsigned ui;39 40 cout << sizeof(A) << endl;41 cout << sizeof(B) << endl;42 cout << sizeof(C) << endl;43 cout << sizeof(D) << endl;44 cout << sizeof(E) << endl;45 // The result is 1 1 1 4 4 on Visual Studio 2012.46 ptr->f();47 // class with no data member have to occupy 1 byte, so as to have an address.48 // class with virtual functions need a pointer to the virtual function table.49 printf("The address of d is %p.\n", &d);50 printf("The address of e is %p.\n", &e);51 printf("The address of d.f is %p.\n", (&D::f));52 printf("The address of e.f is %p.\n", (&E::f));53 54 memcpy(&ui, &d, 4);55 printf("d = %X\n", ui);56 memcpy(&ui, &e, 4);57 printf("e = %X\n", ui);58 memcpy(&ui, ptr, 4);59 printf("*ptr = %X\n", ui);60 61 return 0;62 }

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3689884.html

你可能感兴趣的文章
算法设计与分析—— 动态规划法
查看>>
[软件哲理]转 从敏捷的业务目标论软件开发
查看>>
教程三:Wechat库的使用
查看>>
新安裝的Centos7不能联网且ifconfig出现command not found
查看>>
1.21 Python基础知识 - python常用模块-2
查看>>
四种ABAP数据对象(转)
查看>>
Log4net快速配置使用指南。(快速搭建log4net日志平台手册)
查看>>
C#后台获取ajax传来的xml格式数据值
查看>>
###学习《C++ Primer》- 1
查看>>
POJO和JavaBean的区别
查看>>
CSS| 框模型-padding
查看>>
[luoguP2513] [HAOI2009]逆序对数列(DP)
查看>>
[luoguP1360] [USACO07MAR]黄金阵容均衡Gold Balanced L…
查看>>
IOC容器的经典解释
查看>>
vector 与 arraylist
查看>>
简单的SQL语句
查看>>
LA 3521 Joseph's Problem
查看>>
hdu 5067 Harry And Dig Machine
查看>>
从你的u盘启动:30天自制操作系统第四天u盘启动学习笔记
查看>>
hdu 2642 二维树状数组 单点更新区间查询 模板水题
查看>>