以下函数将结构写入文件。
#define PAGESIZE sizeof(BTPAGE)
#define HEADERSIZE 2L
int btwrite(short rrn, BTPAGE *page_ptr)
{
long addr;
addr = (long) rrn * (long) PAGESIZE + HEADERSIZE;
lseek(btfd, addr, 0);
return (write(btfd, page_ptr, PAGESIZE));
}
以下是结构。
typedef struct {
short keycount; /* number of keys in page */
int key[MAXKEYS]; /* the actual keys */
int value[MAXKEYS]; /* the actual values */
short child[MAXKEYS+1]; /* ptrs to rrns of descendants */
} BTPAGE;
如果我将结构更改为类会发生什么,它仍然会起作用吗?
如果我添加了类函数,它在磁盘上占用的大小会增加吗?
答案 0 :(得分:4)
你需要在这里学到很多东西。
答案 1 :(得分:3)
在C ++中,struct
和class
之间的区别仅仅在于默认情况下结构的成员和基类是公共的,而对于类,它们默认是私有的。
简单地将结构的字节写入文件然后再次读回它的技术仅在结构为plain old data, or POD, type时才有效。如果你修改你的结构使它不再是POD,那么这种技术就不能保证工作(描述是什么使得POD结构列在这个链接问题的答案中的规则)。
答案 2 :(得分:1)
如果班级有任何虚拟功能,那么你就麻烦了;如果没有虚函数,你应该还可以(当然,同样适用于结构,因为它也可以有虚函数:结构和类之间的区别只是结构中的默认可见性是公共的,在类中它是私人的。)
答案 3 :(得分:0)
如果您正在进行更多类的序列化,请考虑使用谷歌协议缓冲区或类似的see this question