参考: http://blog.csdn.net/wangyangkobe/article/details/5951248

下面的文章解释有错误,不要看。。。。。。。。。。

记住几句话:

  编译器为每个有虚函数的类都建立一个虚函数表(其大小不计算在类中),并为这个类安插一个指向虚函数表的指针(大小计算在类中),即每个有虚函数的类其大小至少为一个指针的大小4

  虚继承时编译器为该类安插一个指向父类的指针,指针大小为4

#include <iostream>
#include <stdio.h>
using namespace std;
class A{};//
class A2{};
class B:public A{};//
class C:public virtual B{};//4 虚继承一个类
class D:public A,public A2{};//
class E:public virtual A2,public C{};//8 虚继承一个类+C的size为4
class F:public virtual A2,public C{virtual ~F();};//12 虚继承一个类+C的size为4+一个虚函数指针
class G:public virtual A2,public F{virtual ~G();};//12 虚继承一个类+C的size为4+一个虚函数指针
int main(){
cout<<"sizeof(A)="<<sizeof(A)<<endl;
cout<<"sizeof(B)="<<sizeof(B)<<endl;
cout<<"sizeof(C)="<<sizeof(C)<<endl;
cout<<"sizeof(D)="<<sizeof(D)<<endl;
cout<<"sizeof(E)="<<sizeof(E)<<endl;
cout<<"sizeof(F)="<<sizeof(F)<<endl;
cout<<"sizeof(G)="<<sizeof(G)<<endl; }

下面代码:

#include <iostream>
#include <stdio.h>
using namespace std;
class A{
virtual void fun(){}
virtual void fun2(){}
};//4 一个虚函数指针
class A2{};
class B:public A{};//4 指向父类虚表的指针
class C:public virtual B{};//8 虚继承指针+指向父类虚表的指针
class D:public A,public A2{};//4 指向父类虚表的指针
class E:public virtual A2,public C{};// 虚继承指针+指向父类虚表的指针
class F:public virtual A2,public C{virtual ~F();};//12 一个虚继承指针+指向父类虚表的指针+指向本类虚表的指针
class G:public virtual A2,public F{virtual ~G();};//12 一个虚继承指针+指向父类虚表的指针+指向本类虚表的指针
int main(){
cout<<"sizeof(A)="<<sizeof(A)<<endl;
cout<<"sizeof(B)="<<sizeof(B)<<endl;
cout<<"sizeof(C)="<<sizeof(C)<<endl;
cout<<"sizeof(D)="<<sizeof(D)<<endl;
cout<<"sizeof(E)="<<sizeof(E)<<endl;
cout<<"sizeof(F)="<<sizeof(F)<<endl;
cout<<"sizeof(G)="<<sizeof(G)<<endl; }

sizeof运算符、虚函数、虚继承考点(待修改)的更多相关文章

  1. 【整理】C++虚函数及其继承、虚继承类大小

    参考文章: http://blog.chinaunix.net/uid-25132162-id-1564955.html http://blog.csdn.net/haoel/article/deta ...

  2. C++ - 类的虚函数\虚继承所占的空间

    类的虚函数\虚继承所占的空间 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24236469 char占用一个字节, 但不满足4的 ...

  3. C++学习 - 虚表,虚函数,虚函数表指针学习笔记

    http://blog.csdn.net/alps1992/article/details/45052403 虚函数 虚函数就是用virtual来修饰的函数.虚函数是实现C++多态的基础. 虚表 每个 ...

  4. C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问

    0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ...

  5. 虚函数&&虚继承

    如果说没有虚函数的虚继承只是一个噩梦的话,那么这里就是真正的炼狱.这个C++中最复杂的继承层次在VS上的实现其实我没有完全理解,摸爬滚打了一番也算得出了微软的实现方法吧,至于一些刁钻的实现方式我也想不 ...

  6. C++基础 (6) 第六天 继承 虚函数 虚继承 多态 虚函数

    继承是一种耦合度很强的关系 和父类代码很多都重复的 2 继承的概念 3 继承的概念和推演 语法: class 派生类:访问修饰符 基类 代码: … … 4 继承方式与访问控制权限 相对的说法: 爹派生 ...

  7. C#中的虚函数及继承关系

    转载:http://blog.csdn.net/suncherrydream/article/details/8423991 若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法. 虚 ...

  8. 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)

    本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上?             成员函数可以被看作是类 ...

  9. c++内存分布之虚函数(单一继承)

    系列 c++内存分布之虚函数(单一继承) [本文] c++内存分布之虚函数(多继承) 结论 1.虚函数表指针 和 虚函数表 1.1 影响虚函数表指针个数的因素只和派生类的父类个数有关.多一个父类,派生 ...

  10. C++继承-重载-多态-虚函数

    C++ 继承 基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数.定义一个派生类,我们使用一个类派生列表来指定基类.类派生列表以一个或多个基类命名,形式如下: ...

随机推荐

  1. 机器学习笔记:支持向量机(svm)

    支持向量机(svm)英文为Support Vector Machines 第一次接触支持向量机是2017年在一个在线解密游戏"哈密顿行动"中的一个关卡的二分类问题,用到了台湾教授写 ...

  2. 使用PowerShell 修改hosts

    直接上代码 # author:lttr <www.cnblogs.com/GoCircle> # date:2019-08-09[CmdletBinding()] param ( [Par ...

  3. kafka的错误日志log监控

    例如:需要监控下面的日志中的error 日志文件是这个 /data1/confluent-5.2.2/logs/connect/kafka-connect.log 1/ 参考上一篇安装zabbix_a ...

  4. Logger Rate Limiter

    Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

  5. Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  6. Oracle-DDL 3- 触发器

    DDL-数据定义语句: 四.触发器 -- 触发器(trigger),与某些特定的操作绑定,当达到触发条件后会自动触发--主要用来将某些操作的过程记录下来,或者阻止某些非法的操作,保护数据 /*触发条件 ...

  7. jenkins-docker部署

    安装docker http://www.cnblogs.com/cjsblogs/p/8717304.html 安装jenkins mkdir -p /root/dockerfile/base/cen ...

  8. 【笔记】vue实现简单项目和页面跳转

    此项目适合不会前端,不会vue的人. 不会vue真正的开发,这里用vue和vant-ui简单搭一个商城app的tabbar和页面跳转. 装vue-cli3.0 根据官网快速上手搭建vant项目,官网 ...

  9. 剑指offer-和为S的两个数字-知识迁移能力-python

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路 ...

  10. Hyperledger Fabric(4)链码ChainCode

    智能合约,是一个抽象的概念,智能合约的历史可以追溯到 1990s 年代.它是由尼克萨博(Nick Szabo)提出的理念,几乎与互联网同龄. 我们这里所说的智能合约只狭义的指区块链中.它能够部署和运行 ...