c++, class的大小
不为类、对象的函数分配空间;
在类中如果有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的大小的更多相关文章
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...
- JavaScript动画-拖拽改变元素大小
▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...
- C#中如何调整图像大小
在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...
- javascript动画系列第四篇——拖拽改变元素大小
× 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位 ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- Android SearchView 自定义SearchIcon和字体颜色大小
自定义SearchView的搜索图标和字体属性相对复杂一些,记下来. 一.自定义SearchIcon 1.API版本低于21:版本小于21时,要修改SearchIcon比较复杂,需要先获取到Searc ...
- ARM CPU大小端
ARM CPU大小端: 大端模式:低位字节存在高地址上,高位字节存在低地址上 小端模式:高位字节存在高地址上,低位字节存在低地址上 STM32属于小端模式,简单的说,比如u32 temp=0X1234 ...
- [函數] Firemonkey Android 取得系统参数设定的字型大小
Android 系统参数设定内,可以设定字型大小: 可以透过下面代码来取得字型大小比例: function FontScale: Single; var Resources: JResources; ...
- [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...
随机推荐
- 大神的vim配置
大神的vim配置,O(∩_∩)O spf13-vim : Steve Francia's Vim Distribution __ _ _____ _ ___ _ __ / _/ |___ / __ _ ...
- python成长之路10——socketserver源码分析
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET ipv4(默认) socket.AF_INE ...
- [LeetCode]题解(python):009-Palindrome Number
题目来源: https://leetcode.com/problems/palindrome-number/ 题意分析: 这题是要判断一个int是否一个回文数,要求不能申请额外的空间. 题目思路: 这 ...
- 首届全球RTB(实时竞价)广告DSP算法大赛
首届全球RTB(实时竞价)广告DSP算法大赛 竞赛指南 RTB (Real Time Bidding, 实时竞价) 是近年来计算广告领域最激动人心的进展之一. 它增加了展示广告的透明度与效率, ...
- uva11722 - Joining with Friend(几何概率)
11722 - Joining with Friend You are going from Dhaka to Chittagong by train and you came to know one ...
- 1294 - Positive Negative Sign(规律)
1294 - Positive Negative Sign PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...
- POJ 1410 Intersection(线段相交&&推断点在矩形内&&坑爹)
Intersection 大意:给你一条线段,给你一个矩形,问是否相交. 相交:线段全然在矩形内部算相交:线段与矩形随意一条边不规范相交算相交. 思路:知道详细的相交规则之后题事实上是不难的,可是还有 ...
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的陷阱
mer_stage 表有 216423 条记录,DDL: CREATE TABLE `mer_stage` ( `STAGE_ID` int(11) NOT NULL AUTO_INCREMENT, ...
- MCU开发之I2C通信
程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变.各个标志位的意义如下: PSW.7(Cy):进 ...
- c++ ,protected 和 private修饰的构造函数
c++ protected 和 private修饰的构造函数: 1.在类的外部创建对象时,不能调用protected或private修饰的构造函数. 2.当子类中的构造函数调用父类的private构造 ...