笔试复习_C++_类(一)
来源:互联网 发布:1977特纳里夫空难 知乎 编辑:程序博客网 时间:2024/06/05 14:28
类(class)是面向对象程序设计实现信息封装的基础。类是用户定义类型,每个类包含数据说明和操作数据的函数,类的实例称为对象。
1.结构
结构是用户定义的数据类型,包含数目固定的成员,每个成员可以是不同类型。一个结构变量在内存中占有连续的存储空间并且存储空间是对齐的。
struct 类型名{ 类型 成员1; 类型 成员2; ... 类型 成员n;};
①声明类型之后声明变量
struct employee { char name [ 10 ] ; long code ; float salary ; char address [ 50 ] ; char phone [ 20 ] ;} ;employee worker1, worker2, *Emp ;
②类型声明同时声明变量,可以同时初始化
struct employee { char name [ 10 ] ; long code ; float salary ; char address [ 50 ] ; char phone [ 20 ] ;} ;worker1, worker2, *Emp ;
③直接声明类型结构变量(此时没有结构类型标识符)
struct { char name [ 10 ] ; long code ; float salary ; char address [ 50 ] ; char phone [ 20 ] ;} ;worker1, worker2, *Emp ;
计算机中存储空间按照字节划分,理论上任何类型变量都可以从任意地址开始,但是实际上访问特定的变量从特定的地址开始,需要各种类型的变量按照规则在空间上排列,这就是对齐。
例如:
struct MyStruct { double dda1; char dda; int type;};
sizeof(MyStruct)不等于sizeof(double)+sizeof(char)+sizeof(int)=13而是等于16。
由于对齐规则,为了提高存储速度,默认情况下变量存放的起始地址相对于结构起始地址的偏移量必须为该变量所占字节的倍数。在32位系统中:
Char 偏移量必须为sizeof(char)即1的倍数
int 偏移量必须为sizeof(int)即4的倍数
float 偏移量必须为sizeof(float)即4的倍数
double 偏移量必须为sizeof(double)即8的倍数
Short 偏移量必须为sizeof(short)即2的倍数
示例:
例题:
1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是:
struct A{ int a; short b; int c; char d;};struct B{ int a; short b; char c; int d;};
解:
A:int+4,short+2,后面有int所以填充2,int+4,char+1不够4再填充3一共16。
B:int+4,short+2,char+1,后面有int填充1,int+4一共12。
2.sizeof(bu)的值是()
#pragma pack(2)class BU{ int number; union UBffer { char buffer[13]; int number; }ubuf; void foo(){} typedef char*(*f)(void*); enum{hdd,ssd,blueray}disk;}bu;
解:
注意第一行,#pragma pack(2)
首先考虑没有这句话时,我们在类、结构或者union补齐字节的时候,找它们的成员数据中找字节最大的那个数去衡量如何对齐,但是有了这句话以后,对齐方式是取 pack(n)中n和字节最大数值的最小值去对齐;可见本题中对齐字节数为2;
int+4;
UBffer中, union的大小取决于它所有的成员中,占用空间最大的一个成员的大小,并且需要内存对齐,buffer+13,由于对齐字节位2,所以ubuf结构体一共14字节。
void foo(){}函数声明不占用空间。
typedef char*(f)(void);声明不占用空间。
enum{hdd,ssd,blueray}disk;枚举类型为4个字节。
所以大小一共4+14+4=22
- 笔试复习_C++_类(一)
- 笔试复习_C++_指针(一)
- 笔试复习_C++_指针(二)
- 笔试基础知识复习(一)
- 博览网_C++_第二周_Rectangle类的初步实现(一)
- 笔试复习_TCP/IP(一)
- #java笔试复习(一)#
- 网易2018内推笔试题_操作序列_C++
- 2018秋招笔试题_韩信点兵_C++
- 网易2018内推_算法工程师_笔试题_交错01串_C/C++
- 博览网_C++_第一周_C++ complex类的实现(我的第一个c++程序)
- 面向对象设计_C++_类
- 博览网_C++_第二周_Rectangle类的初步实现(一)(修订)之拷贝构造和拷贝赋值规范写法
- 华为_C++ 笔试题目
- 华为_C++ 笔试题目
- 4399_C++笔试题
- 网易2018校招笔试_小易喜欢的数列_C++
- 2018搜狐秋招笔试_Kolakoski序列_C++_部分回忆版Demo
- Spring Boot学习
- 解决WebUploader在google浏览器中响应慢的问题
- 获得页面url的某个url参数的值
- 代理模式案例
- HDU-5754 Life Winner Bo(混合博弈)
- 笔试复习_C++_类(一)
- 知道创宇研发技能表3.1
- 笔试面试高频题(操作系统)
- springboot学习----加载application.property
- 计算机网络笔记整理(四):网络层
- redis实现分布式锁
- Qt Creator下载和安装(详细教程)
- Python和Java的区别
- lrzsz串口工具移植到ARM开发板