class d:public a{virtual void func()=0};
class e:public b,public d{};
其中sizeof(e)为8
若其中d类不继承a类,那么sizeof(e)却为4
这是为什么
关键是与这个的区别class d:public a{virtual void func()=0}; class e:public b,public d{};中的e大小为什么不是4呢
追答class a{virtual void func()=0;}; class b{};
class d:public a{virtual void func()=0;};
class e:public b,public d{};
这样就是4了。
前面若写 class a{ }; 就不一样了。编译器 有自己的处理方法,说不出多大的道理。
其实我的追问里面是8,1+4,然后字节对齐,但是如果类d没有继承a 那么e的大小才是4,但是完全找不到原理
追答字节对齐 有时8,有时16,也有时 4。
说是 用宏 #pragma pack(), 用pack(参数)可以调整对齐大小,实际上 有时 编译器 还是不听指挥。确实找不到原理。
你说的这些我是知道的,但是请看我补充的问题,关键是这两种情况为什么会有区别
实例化的时候添加?那class d:public a{virtual void func()=0}; class e:public b,public d{};中的e大小为什么不是4呢
class a{};class b{};class c:public a,public b{}; 其中sizeof(c)为...
c类继承a、b类,由于 a类 没成员,b类 也没成员, c 也没新成员,所以 编译器把 sizeof(a),sizeof(b),sizeof(c) 都处理成 1。假定a,b 有成员,就不同了,例如 class a{double x;} -- 8 bytes class b(int y;} -- 4 bytes sizeof(c) 就是 16 bytes 编译器 有自己的...
C++中 class A(); 大小是多少?
class A{};VC下大小是1
使用sizeof计算类的大小
public:virtual void fun(void);} 此时sizeof(B)的大小为8,而不是4。因为在类中隐藏了一个指针,该指针指向虚函数表,正因为如此,使得C++能够支持多态,即在运行时绑定函数的地址。2)另一个要注意的是,当类中没有任何成员变量,也没有虚函数的时候,该类的大小是多少呢?例如:class B2 { ...
C++一个继承类继承两个父类,能同时做两个父类指针指向他吗?_百度知 ...
可以。class A{ };class B{ };class C:public A,public B{ };void main(){ C c;A *a;B *b;a=&c;b=&c;}
sizeof()
1 可以,测的是返回值的长度。2 你的这个问题很好。是A的对象,但是··因为静态成员不是堆中分配,而是在常量区,sizeof函数测试对象是只是去堆中看看。不管常量区。3 b还是B的成员,只是不能访问而已,继承是全部继承。然后再看权限。你的问题问的都很好。
C语言中sizeof的用法
实际上sizeof的实现应该是用宏来做的,宏在编译时进行执行。具体实现可以参考下面。 2、sizeof('a')在C语言中的结果是4,在C++中结果是1,看过某篇文章说C中sizeof侧重于“数”,而C++中sizeof更侧重于“字符”。 3、文章中讲了两个用宏实现sizeof的经典应用 复制代码 代码如下: \/\/适用于非数组 #define ...
为什么输出sizeof(stu)是24个字节,不应该是16+1+4=21个吗,求指教,感恩...
c++类的大小是和内存对齐有关系的 16+1+4=21,但是需要内存对齐,所以补足到24
为什么sizeof(&a)的值为400;程序如下:
printf("%d\\n",sizeof(&a));输出的值都是四百,正如前面提到的,他们的地址值是一样的,sizeof本来就是用来求数组的长度的,故得到四百很容易理解;而sizeof(&a)也是四百,是因为它每一次加一,就跳过四百个字节,就好比前面的指针p,因为他是int型的,所以每次跳过4个字节。。。不知讲清楚了没...
若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是...
a中有两个int ,一个char 。按说应该是 4*2 + 1 =9;但是,有个新手不知道的规则。那就是对齐。就是说,以4个字节为一行(32位),若当前的行中不够放下下一个数据的话,那么就放弃当前行的剩余空间,从下一行开始。于是,变成了 4 + ( 1 + 3【3个字节没有利用,但是依旧占用空间】) +4 = 12;一个...
C++中的函数调用在OC是另外一种称谓,是什么
1,class A: \/\/学生对象 { public:int id;string name;int age;string sex;};第一种创建B的方法:class B:{ public:int classId; \/\/班级编号 A a; \/\/学生对象数组 } \/\/这种方式创建,是直接创建的A a对象,B b;那么当B对象创建的时候,就为a对象分配了空间,也就是a对象被初始化...