对类 sizeof
sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么?
#include <iostream>
using namespace std; class Base1 {
public:
int b1;
static int a1;
virtual void f() { cout << "Base1::f" << endl; }
virtual void g() { cout << "Base1::g" << endl; }
void h() { cout << "Base1::h" << endl; } }; class Base2 {
public:
int b2;
virtual void f() { cout << "Base2::f" << endl; }
virtual void g() { cout << "Base2::g" << endl; }
virtual void h() { cout << "Base2::h" << endl; }
}; class Base3 {
public:
int b3;
virtual void f() { cout << "Base3::f" << endl; }
virtual void g() { cout << "Base3::g" << endl; }
virtual void h() { cout << "Base3::h" << endl; }
}; class Derive : public Base1, public Base2, public Base3 {
public:
int d1;
virtual void f() { cout << "Derive::f" << endl; }
virtual void g1() { cout << "Derive::g1" << endl; }
}; typedef void(*Fun)(void); int main()
{
Base1 temp1;
Base2 temp2;
Base3 temp3;
Derive d; printf("%d\n",sizeof(temp1));
printf("%d\n",sizeof(Base1)); printf("%d\n",sizeof(d)); return ;
}

sizeof一个类的时候,非静态成员变量、有虚函数的话虚表指针会都计算进去,静态成员变量,还有成员函数都是不会被计算的。如果是子类,那么父类中的成员也会被计算的。
可以看出静态成员变量是独立于类的对象,只跟类名绑定的,虚函数表是跟类的对象绑定的
对类 sizeof的更多相关文章
- 对类sizeof的时候
sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么? #include<stdio.h> #include<string.h& ...
- 含有虚函数的类sizeof大小
#include <iostream> using namespace std; class Base1{ virtual void fun1(){} virtual void fun11 ...
- sizeof与类,继承,virtual的种种
对虚继承层次的对象的内存布局,在不同编译器实现有所区别. 首先,说说GCC的编译器. 它实现比较简单,不管是否虚继承,GCC都是将虚表指针在整个继承关系中共享的,不共享的是指向虚基类的指针. clas ...
- sizeof(类)
类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的. 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小.首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分配 ...
- sizeof的用法
因为对sizeof不是很了解,所以去查了博客啥的,发现还是有大学问的,以下对其用法进行总结. 参考:https://www.cnblogs.com/zhangyz/articles/4736758.h ...
- C++类成员存储大小
1.对象分布图 2.解析 每个类的大小只有其成员变量大小,其中包括:类成员属性,虚函数指针: 而其他没有如:静态变量[静态区],普通函数.静态函数[代码区] 3.总结 类对象的sizeof只包含成员变 ...
- C++基础-类和对象
本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- c/c++面试题(1)
1.C++中有哪4个和类型转换相关的关键字?这些关键字都有什么特点?应该在哪些场合下使用. C语言中的强制类型转换可以随意的转换我们想要的类型了,格式如下(类型) 变量名; 为什么c++还要引入新的4 ...
随机推荐
- 了解下Mysql的间隙锁及产生的原因
什么是间隙锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁:对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也 ...
- 简单方法实现无刷新提交Form表单
前几天遇到一个前端的问题.我希望提交表单后页面不跳转且不刷新当前页面,然而查了很多方法都没有解决. 由于Form 是提交后一定刷新页面的,所以我们可以用一个折中的办法.我们给Form 指定一个ifra ...
- 使用 v-cloak 防止页面加载时出现 vue.js 的变量名
知识点:使用 v-cloak 防止页面加载时出现 vue.js 的变量名 场景:在使用vue语法,实现下拉框功能时,展示数据列表之前,出现对应的 vuejs 变量名 代码: var vm = new ...
- jquery-ui autocomplete在模态框(model)中,出不来
知识点:在使用模态框中使用 jquery-ui autocomplete,无法显示下拉框的数据 参考博客:https://www.jianshu.com/p/3944693773ed 解决办法:在au ...
- Python内置函数(9)——callable--转载
英文文档: callable(object) Return True if the object argument appears callable, False if not. If this re ...
- append 注意事项
>>> t1 = [, ] >>> t2 = t1.append() >>> t1 [, , ] >>> t2 None
- Hardcoded string should use @string resource 警告
在布局文件中,文本的设置使用如下写法时会有警告:Hardcoded string "下一步", should use @string resource <Button and ...
- PHP获得真实客户端的真实时用到的IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP.如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP. HTTP_CLIENT_IP 是代理服务器发送的HTTP头. ...
- Proxy(代理)
意图: 为其他对象提供一种代理以控制对这个对象的访问. 适用性: 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式.下面是一 些可以使用Proxy 模式常见情况: 1) 远程代 ...
- [转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1. 今天分享一个自己在开发过程中遇到的困难. 用VS2015开发了一个windows客户端(win32项目),在自 ...