عذر میخام ولی کلا کدتون ایرادای اساسی داره.
فقط sizeof نیست مشکلش.
توابعی که داخل کلاس تعریف کردید هدفشون چیه؟ فقط یک مقدار رو میگیرن و عینا همونو برمیگردونن! خب چرا؟! شاید میخاید مقداردهی کنید متغیرهای قسمت private رو ولی اینطوری راهش نیست. باید از عملگر = استفاده کنید.
در مورد sizeof هم باید دقت کنید که سایز هر کلاس بسته به سایز متغیر های تعریف شده داخل کلاس داره و private یا public اش فرقی نداره. ولی توابع به سایز شی هیچ کاری ندارن. هزار تا تابع هم تعریف کنید داخل کلاس سایزش فقط بسته به متغیرهای داخل کلاس هست. متغیرهای داخل توابع هم ربطی به سایز کلاس ندارن...اونا در زمان اجرای تابع ساخته میشن و با پایان تابع عمرشون تموم میشه. پس فقط متغیرهایی که تو بدنه ی تابع تعریف کردید سایزو مشخص میکنن. و البته کلاس string هم سایزش مثل کلاس های دیگه ثابت هست و رشته ی داخلش به صورت داینامیک حافظه میگیره.
در مورد نوشتن تو فایل هم این روش درست عمل نمیکنه... اگر میخاید اطلاعات کلاس رو به حالت رشته ذخیره کنید باید تک تک فیلد هاش رو تبدیل به رشته کنید و بنویسید.
در کل من یک نمونه مینویسم شاید منظورتون این بوده:
#include <sstream>
#include <fstream> // std::ofstream
class TStudent
{
private:
int __number;
std::string __name;
std::string __fam;
float __age;
public:
void Set_Number(const int number)
{
this->__number = number;
};
int Get_Number()
{
return this->__number;
};
void Set_Name(const std::string name)
{
this->__name = name;
};
std::string Get_Name()
{
return this->__name;
};
void Set_Fam(const std::string fam)
{
this->__fam = fam;
};
std::string Get_Fam()
{
return this->__fam;
};
void Set_Age(const int age)
{
this->__age = age;
};
float Get_Age()
{
return this->__age;
};
std::string DataToString()
{
std::string ret_str;
char str[64];
std::itoa(this->__number, str, 10);
ret_str = str;
ret_str += "\n";
ret_str += this->__name;
ret_str += "\n";
ret_str += this->__fam;
ret_str += "\n";
std::ostringstream oss;
oss << this->__age;
ret_str += oss.str();
return ret_str;
};
void WriteDataToFile(std::string file_name)
{
std::ofstream ofs (file_name.c_str(), std::ofstream::out);
ofs << this->DataToString();
ofs.close();
};
};
مثال:
TStudent s;
s.Set_Age(29.0f);
s.Set_Number(20);
s.Set_Name("mohammad");
s.Set_Fam("qadiany");
s.WriteDataToFile("D:\\test_student.txt");