فرض کنین من یه کلاس به نام student تعریف کردم که 4 تابع public به صورت زیر تعریف کردم

public:
int std_number(int number)
{
return number;
}
string std_name(string name)
{
return name;
}
string std_family(string fam)
{
return fam;
}
float std_ave(float ave)
{
return ave;
}

توی main یه شی به نام std ازش میسازم ( student std )
حالا به توابع عمومی مقدار میدم مثلا { number = 1 - name = ahmad - fam = kho - ave = 15.55 }
حالا با دستور زیر مقادیر رو درون یک فایل میریزیم ولی وقتی ورودی بالا رو با تابع write درون فایل میریزم متن ( Ì ) رو مینویسه ؟
ofstream fwrite;
fwrite.write((char *)&std, sizeof(student));

سوالم اینه که وقتی میگیم sizeof(student) منظورش اینه که اندازه متغیر های private رو بده؟ ( چون به جای اینکه در public مقادیر رو وارد کنیم بیایم ابتدا در private چهار متغیر به نام int number , string name , string fam , float ave رو تعریف کنیم و در قسمت public بهشون مقدار بدیم وقتی دستور
fwrite.write((char *)&std, sizeof(student));

رو استفاده میکنیم مقادیری که وارد کردیم { number = 1 - name = ahmad - fam = kho - ave = 15.55 } رو بدرستی درون فایل میریزه ولی در صورتی که اگه private وجود نداشت و فقط در public به تابع مقدار میدادیم متن ( Ì ) رو درون فایل متنی می ریخت ! ! ! )
در کل سوالم اینه که sizeof(student) فقط اندازه بخش private رو برمیگردونه و به تابع write میده در صورتی که اگه از struct استفاده میکردیم که به صورت پیش فرض public هست و مشکلی بوجود نمیاد و مقادیر ورودی رو بدرستی درون فایل میریخت ؟

آیا sizeof(student) فقط اندازه متغیر های درون کلاس student که به صورت private تعریف شده اند رو برمی گردونه یا نه ؟