在 C++ 文件流中复制静态变量

Posted

技术标签:

【中文标题】在 C++ 文件流中复制静态变量【英文标题】:Copying static variable in C++ file stream 【发布时间】:2018-10-13 11:51:44 【问题描述】:

我编写了一个程序来使用 c++ 文件流删除存储在二进制文件中的类对象。在此过程中,我必须将所有对象从一个文件(example.dat)复制到另一个文件(temp.dat)。

我有一个 静态变量 作为类的一部分,我希望将它与对象一起复制到其中。 但静态变量并没有复制到 temp.dat,它在 temp.dat 中的值为 0,因为静态变量不是任何对象的一部分。

这是我使用的函数和类定义

                                                  //the problem is in this function
    cout<<"\nSno of record to delete: ";
    int del;
    cin>>del;

        fstream o;
o.open("temp.dat",ios::out|ios::in|ios::binary);

if(!f)

    cout<<"File not Found";
    exit(0);

else
f.seekp(0);
    f.read((char*)&dats, sizeof(dats));
    while(!f.eof())
    
        if(dats.sno!=del)
        
            o.write((char*)&dats, sizeof(dats));



        

        f.read((char*)&dats, sizeof(dats));

    


     

o.close();
f.close();
remove("date.dat");                       
rename("temp.dat", "date.dat");



return 0; 

类定义

class date
int d,m,y;
int k;
char dday[10];
char monthn[10];
char name[50];


public:

int sno;
int odd ();
void getdata();
int fsno();
void display();
static int ID; //static variable

请提出解决此问题的方法

【问题讨论】:

【参考方案1】:

你不应该混淆类和对象。静态数据成员不属于 对象,但属于整个类并在所有实例之间共享 所以你必须将它们与单个对象分开存储和读取。

例如,您可以将其存储在文件开头:

f.seekp(0);

f.read((char*)&date::ID, sizeof(date::ID));
if (!f)  cout<<"File format bad"; exit(0); 
o.write((char*)&date::ID, sizeof(date::ID));

// go on reading objects
f.read((char*)&dats, sizeof(dats));
// ...

【讨论】:

我了解静态成员的工作原理,这是由于您的回答中提到的原因,变量没有被复制到文件中。你能帮我分别复制静态变量的代码吗 一般来说它就像所有其他读写一样。取决于您要在文件中存储的位置。

以上是关于在 C++ 文件流中复制静态变量的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的静态变量

请问C++语言里静态变量和全局变量有啥区别?谢谢

C++面试题目汇总

C++知识概要

C++中的静态全局变量

大量使用静态成员变量是一种好习惯吗? [复制]