CArchive <<
ve >>
İşleçleri Kullanma
CArchive
<< >>, basit veri türlerinin yanı sıra CObject
bir dosyaya ve dosyadan s yazma ve okuma için ve işleçleri sağlar.
Bir nesneyi arşiv aracılığıyla bir dosyada depolamak için
Aşağıdaki örnekte, bir nesnenin arşiv aracılığıyla bir dosyada nasıl depoluşu gösterilmektedir:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Daha önce dosyada depolanan bir değerden nesne yüklemek için
Aşağıdaki örnekte, daha önce bir dosyada depolanan bir değerden bir nesnenin nasıl yüklenecekleri gösterilmektedir:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Genellikle, DECLARE_SERIALIZE makroyla bildirmiş olmanız gereken türetilmiş sınıfların Serialize
CObject
işlevlerinde arşiv aracılığıyla bir dosyaya ve dosyadan veri depolar ve yüklersiniz. bir nesneye CArchive
başvuru işlevinize Serialize
geçirilir. İşlevin IsLoading
CArchive
dosyadan veri yüklemek veya dosyaya veri depolamak için çağrılıp çağrılmadığını Serialize
belirlemek için nesnesinin işlevini çağırırsınız.
Seri Serialize
hale getirilebilir CObject
türetilmiş bir sınıfın işlevi genellikle aşağıdaki forma sahiptir:
void CSerializableObj::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add storing code here
}
}
Yukarıdaki kod şablonu, AppWizard'ın belgenin işlevi için Serialize
oluşturduğu (öğesinden CDocument
türetilen bir sınıf) ile tam olarak aynıdır. Bu kod şablonu, aşağıdaki örnekte olduğu gibi depolama kodu ve yükleme kodu her zaman paralel olması gerektiğinden gözden geçirilmesi daha kolay bir kod yazmanıza yardımcı olur:
void CEmployee::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
archive << m_strName << m_wAge;
else
archive >> m_strName >> m_wAge;
}
Kitaplığı ilk işlenen olarak ve >>
işleçleriniCArchive
, ikinci işlenen olarak da aşağıdaki veri türlerini ve sınıf türlerini tanımlar<<
:
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
ve CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
ve CPoint
RECT
ve CRect
SIZE
ve CSize
WORD
Dekont
Bir arşiv aracılığıyla depolamak ve yüklemek CObject
için ek dikkate alınması gerekir. Daha fazla bilgi için bkz . CObjects'i Arşiv aracılığıyla depolama ve yükleme.
CArchive
<<
ve >>
işleçleri her zaman ilk işlenen olan nesneye CArchive
bir başvuru döndürür. Bu, aşağıda gösterildiği gibi işleçleri zincirlemenizi sağlar:
archive << m_strName << m_wAge;