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

在类中如果有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. Android 开发笔记 “调用WebService”

    WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SDK中并没有提供调用WebService的库 ...

  2. open和fopen的区别:

    1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量.执行 ...

  3. DELPHI编写服务程序总结

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  4. LINUX下使用crontab进行RMAN备份实验

    之前写了脚本,手动执行可以,使用crontab总是无法运行成功,今天下午花了两个小时实验,完成如下: 注意事项:脚本完成首先手动执行,确定可以正常执行. 在crontab中使用,要注意以下几点: 1. ...

  5. Linux上MongoDB的安装与配置

    长话短说,一共有两种方法.(我随便选了一个发行版Mint) 一.apt-get方法 官网上说的很清楚: http://docs.mongodb.org/manual/tutorial/install- ...

  6. Vijos 1100 加分二叉树

    题目 1100 加分二叉树 2003年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 设一个n个节点的二叉树tree的中序遍历为( ...

  7. 孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网

    孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网 孙弘与Masa Maso 做互联网最贵的衬衫(2)

  8. 二分图最大匹配 hdoj 1045

    题目:hdoj1045 题意:给出一个图.当中有 . 和 X 两种,. 为通路,X表示墙,在当中放炸弹,然后炸弹不能穿过墙.问你最多在图中能够放多少个炸弹? 分析:这道题目是在上海邀请赛的题目的数据简 ...

  9. RunLoop学习总结

    开始 很久之前就看了一次YY的文章,没看懂.后来又看了sunny的视频和叶孤城的直播的视频,找了很多资料,对RunLoop也越来越清晰,然后又看了两三次YY的文章,虽然还没完全看懂,不得不说写的非常好 ...

  10. 分享一个 CSDN 自动评论角本

    先修改帐户名和密码 import requests from BeautifulSoup import BeautifulSoup import time def commitfunc(source_ ...