Evet MDC read ve write yöntemleriyle yaptığın okuma ve yazma genelde pek tavsiye edilmiyor. C++ için. Bunun tam nedenini tam olarak bilmemekle beraber dosya yazarken ya da okurken kayıt ettiğin bilgilerin işlemciye göre farklı kaydedildiğini biliyorum.
Örneğin aşağıdaki Öğrenci adında bir sınıfı daha nesnesel bir yöntemle nasıl yazabilirim diye düşünürken çeşitli denemeler yapmıştım:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Ogrenci
{
short numara;
char adi[20];
public:
void VeriAl()
{
cout << "Numarasi: ";
cin >> numara;
cout << "Adi: ";
cin >> adi;
}
};
int main()
{
Ogrenci ogr;
ogr.VeriAl();
ofstream dosya("deneme.txt", ios::binary);
dosya.write((char*) &ogr, sizeof(ogr));
return 0;
}
İşte bunu yaparken Ziyaretçinin dediği gibi << ve >> operatörlerini aşırı yükleyerek yapmanın daha iyi bir yöntem olduğunu öğrendim.
Örneğin sınıfın kurucu işlevi:
class Ogrenci
{
/* ... */
public:
Ogrenci(short numara, string const & adi);
/* ... */
};
Ogrenci ogrenciOku(istream & giris)
{
short numara;
giris >> numara;
string adi;
giris >> adi;
return Ogrenci(numara, adi);
}
Veri Al İşlevi:
class Ogrenci
{
friend istream & operator>> (istream & giris, Ogrenci const &);
/* ... */
};
istream & operator>> (istream & giris, Ogrenci const & ogrenci)
{
ogrenci = ogrenciOku(giris);
return giris;
}
int main()
{
Ogrenci ogrenci;
/* ... */
/* 'giris' burada tanimlanmis bir giris akimi olsun */
giris >> ogrenci;
}
Yazdırma İşlemi:
ostream & operator<< (ostream & cikis, Ogrenci const & ogrenci)
{
return cikis << "Numarasi: " << numara << '\n'
<< "Adi: " << adi << '\n';
}
Not : Henüz benim de C++ bilgim ikinci örnekleri anlamakta yetersiz kalıyor.Şimdilik