网站制作公司去哪找,wordpress怎么能把文章采集,手机网站有什么要求,邯郸网站设计培训在C的类中#xff0c;有成员变量和成员函数。当类经过实例化后#xff0c;便有了类对象#xff0c;C示例对象中的成员变量和成员函数是分开存储的。 成员变量 : 普通成员变量 : 在 对象 指针指向的内存中存储 , 存储方式与 C 语言中的 struct 结构体 存储变量的 内存结布局 …在C的类中有成员变量和成员函数。当类经过实例化后便有了类对象C示例对象中的成员变量和成员函数是分开存储的。 成员变量 : 普通成员变量 : 在 对象 指针指向的内存中存储 , 存储方式与 C 语言中的 struct 结构体 存储变量的 内存结布局 和 字节对齐方式 相同 ; 静态成员变量 : 在 内存 中的 全局数据区 中存储 ; 成员函数 : 不管是 普通成员函数 还是 静态成员函数 , 都存储在 代码段中 ; C面向对象的底层是通过C语言来实现的。 C 编译器 将 C 类 的 成员变量 和 成员函数 进行分开定义 ;
普通成员变量存储 :
对于 普通的 成员变量 , 存放在 结构体 中 , 原来的 类名为 Test , 普通成员变量为 mI , C 编译器会将类转为 struct 结构体 , 然后将 普通成员变量 转为 结构体中的成员 ;
普通成员方法存储 : Test 类中的成员函数 getI , 转为 C 语言后 , 方法名变为 类名_成员函数名 , 即 Test_getI ;函数名 转换完毕后 , 还需要解决一个问题 , 多个对象都需要调用该 Test_getI 方法 , 此时将 第一个函数参数 , 类型为 Test* 类型 , 作为 对象的指针传入 ;Test 类中的 getI 函数 , 最终转为了 Test_getI(Test* pThis) 函数 , 这是一个普通的 C 语言函数 ;
静态成员函数 : C 类中的 静态函数 转为 C 语言函数 ; 函数名 的 转换是一样的 , Test 类中的成员函数 Print , 转为 C 语言后 , 方法名变为 类名_成员函数名 , 即 Test_Print ;
静态成员函数 与 普通成员函数 的区别是 普通成员函数 转换后的 C 语言函数 , 第一个参数是 类对象指针 ; 静态成员函数 转换后的 C 语言函数 , 没有 类对象指针参数 ; 参考https://cloud.tencent.com/developer/article/2342003
空类问题
在C语言中是不允许有空结构体的存在所以自然也就没有空结构体大小一说在C中是可以存在空类和空结构体的实际上在c中将结构体上升为了类。 在C下空类和空结构体的大小是1编译器相关这是为什么呢为什么不是0
C标准中规定“no object shall have the same address in memory as any other variable” 就是任何不同的对象不能拥有相同的内存地址。 如果空类大小为0若我们声明一个这个类的对象数组那么数组中的每个对象都拥有了相同的地址这显然是违背标准的。要是空类为0我们在进行一些指针运算时可能就会出现除0等错误。