I know , I've put a snippet code that I was wondering about it's weird behaviour
The reason you get 0, 48, and 96 from sizeof is related to the way sizeof operator works.
sizeof(int[5]);
This means "the size of an array that could hold 5 integers". It's the same as writing this:
sizeof(int) * 5
In your case, the first output (0) comes from here:
sizeof(student[0]) == (sizeof(student) * 0)
An array that holds 0 instance of student.
sizeof(student[1]) == (sizeof(student) * 1)
sizeof(student[2]) == (sizeof(student) * 2)
And so on.
After fixing these issues
https://t.me/programminginc/538083
Replace this part
if (ye == 2014 || ye == 2013 || ye == 2012 || ye == 2011)
            year = ye;
        else
            year = 2014;
with this piece of code:
private:
int year{2014};
...
public:
...
if (ye >= 2011 && ye < 2014)
year = ye;
Does the same thing.