不为类、对象的函数分配空间;

在类中如果有virtual声明的虚函数,则会隐藏一个指针,该指针指向虚函数表,这对于纯虚函数也是一样;

对于虚继承,还有一个指向父类的指针,该指针为指向虚基类的指针(Pointer to virtual base class)。

#include "stdafx.h"
#include <iostream>
using namespace std; #include "t1.h" class TNULL
{
};
class Ti
{
int i;
};
class Tic
{
int i;
char c;
};
class Tf
{
void f(void){}
};
class T_vf
{
virtual void f(void){}
};
class Tif
{
public:
void set(int x) {i = x;}
private:
int i;
};
class Ti_vf
{
public:
virtual void set(int x) {i = x;}
private:
int i;
};
class Ti_v0f
{
public:
virtual void set(int x) = ;
private:
int i;
}; class Ti_sf
{
int i;
static void sf(void){}
};
class TT
{
TT(){}
};
class TxT
{
~TxT(){}
}; class TTT
{
TTT(){}
~TTT(){}
private:
Tif* m_pTif;
}; class TTTFFF
{
public:
TTTFFF() {
m_pTif = new Tif;
m_pTif->set();
} ~TTTFFF(){
delete(m_pTif);
m_pTif = ;
}
void f1(void){}
void f2(void){}
void f3(void){}
private:
Tif* m_pTif;
};
class TTT_VFFF
{
public:
TTT_VFFF() {
m_pTif = new Tif;
m_pTif->set();
} ~TTT_VFFF(){
delete(m_pTif);
m_pTif = ;
}
virtual void f1(void){}
virtual void f2(void){}
virtual void f3(void){}
private:
Tif* m_pTif;
};
void t1(void)
{
cout<<"sizeof(char) = "<<sizeof(char)<<endl;
cout<<"sizeof(class TNULL) = "<<sizeof(class TNULL)<<endl;
cout<<"sizeof(class Ti) = "<<sizeof(class Ti)<<endl;
cout<<"sizeof(class Tic) = "<<sizeof(class Tic)<<endl; cout<<"sizeof(class Tf) = "<<sizeof(class Tf)<<endl;
cout<<"sizeof(class Tif) = "<<sizeof(class Tif)<<endl;
cout<<"sizeof(class T_vf) = "<<sizeof(class T_vf)<<endl;
cout<<"sizeof(class Ti_vf) = "<<sizeof(class Ti_vf)<<endl;
cout<<"sizeof(class Ti_v0f) = "<<sizeof(class Ti_v0f)<<endl; cout<<"sizeof(class Ti_sf) = "<<sizeof(class Ti_sf)<<endl;
cout<<"sizeof(class TT) = "<<sizeof(class TT)<<endl;
cout<<"sizeof(class TxT) = "<<sizeof(class TxT)<<endl;
cout<<"sizeof(class TTT) = "<<sizeof(class TTT)<<endl;
cout<<"sizeof(class TTTFFF) = "<<sizeof(class TTTFFF)<<endl;
cout<<"sizeof(class TTT_VFFF) = "<<sizeof(class TTT_VFFF)<<endl; TTTFFF t;
cout<<"sizeof(TTTFFF t) = "<<sizeof(t)<<endl; /*sizeof(TTTFFF t) = 4*/ }
/*
sizeof(char) = 1
sizeof(class TNULL) = 1
sizeof(class Ti) = 4
sizeof(class Tic) = 8
sizeof(class Tf) = 1
sizeof(class Tif) = 4
sizeof(class T_vf) = 4
sizeof(class Ti_vf) = 8
sizeof(class Ti_v0f) = 8
sizeof(class Ti_sf) = 4
sizeof(class TT) = 1
sizeof(class TxT) = 1
sizeof(class TTT) = 4
sizeof(class TTTFFF) = 4
sizeof(class TTT_VFFF) = 8
sizeof(TTTFFF t) = 4
请按任意键继续. . .
*/

扩展:

1.  C++类的大小 http://www.cnblogs.com/luxiaoxun/archive/2012/09/01/2666395.html

2.  C++ 虚函数表解析 http://blog.csdn.net/haoel/article/details/1948051

c++, class的大小的更多相关文章

  1. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  2. 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...

  3. JavaScript动画-拖拽改变元素大小

    ▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...

  4. C#中如何调整图像大小

    在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...

  5. javascript动画系列第四篇——拖拽改变元素大小

    × 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位 ...

  6. 1199 Problem B: 大小关系

    求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...

  7. Android SearchView 自定义SearchIcon和字体颜色大小

    自定义SearchView的搜索图标和字体属性相对复杂一些,记下来. 一.自定义SearchIcon 1.API版本低于21:版本小于21时,要修改SearchIcon比较复杂,需要先获取到Searc ...

  8. ARM CPU大小端

    ARM CPU大小端: 大端模式:低位字节存在高地址上,高位字节存在低地址上 小端模式:高位字节存在高地址上,低位字节存在低地址上 STM32属于小端模式,简单的说,比如u32 temp=0X1234 ...

  9. [函數] Firemonkey Android 取得系统参数设定的字型大小

    Android 系统参数设定内,可以设定字型大小: 可以透过下面代码来取得字型大小比例: function FontScale: Single; var Resources: JResources; ...

  10. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制

    原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...

随机推荐

  1. System.Web Namespce

    System.Web概述: System.Web是.NET中web应用开发的一个基础类库,定义浏览器与服务器之间的所有操作方法,包括请求输入流(HttpRequest).输出流(HttpRespons ...

  2. NET Core,你必须了解无处不在的“依赖注入”

    NET Core,你必须了解无处不在的“依赖注入” ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middle ...

  3. QR码生成原理

    一.什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化.QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正 ...

  4. QT学习 之 QwtPlot(数学绘图)

    QT对于统计图像.函数图像等的绘制是没有相关组件的帮助的,只有利用手工绘制图片. QwtPlot是用来绘制二维图像的widget,继承自QFrame 和 QwtPlotDict.不过严格的说来,它只是 ...

  5. spring mvc实现ajax 分页

    使用到的技术: ·spring 3 mvc ·json ·jquery ·java ·mysql 首先,要了解如何在spring mvc中使用json. 以下主要从Dao和View及Controlle ...

  6. 简单的java缓存实现

    扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法 ...

  7. POJ 3691 &amp; HDU 2457 DNA repair (AC自己主动机,DP)

    http://poj.org/problem?id=3691 http://acm.hdu.edu.cn/showproblem.php?pid=2457 DNA repair Time Limit: ...

  8. AJAX同步与异步

    今天来大概说说AJAX中的同步与异步.其实,就我的理解,同步与异步的区别就是程序执行过程中是否有等待. 同步:意思就是js代码加载到当前的 AJAX时候,会等待AJAX代码执行完毕后再开始加载其他代码 ...

  9. git 使用过程(四、回退版本)

    1.查看修改历史 命令:git log  如果嫌内容太多 可以加参数  --pretty=oneline (图一) 2.回退 命令:git reset --hard HEAD^    HEAD:代表本 ...

  10. for循环语句之兔子生崽

    有一对幼兔,幼兔经过一个月长为小兔,小兔经过一个月长为大兔并且生下一对幼兔,而且大兔每月还会生下一对幼兔,问N个月后有多少对兔子 Console.WriteLine("请输入经过了几个月:& ...