有一个头文件,看不懂求详细解释。该怎么处理

有一个头文件,看不懂求详细解释。
[code=C/C++][/code]
#ifndef studentc_h_
#define studentc_h_

#include "iostream"
#include "string"
#include "valarray"

  class Student
{
private:
typedef std::valarray <double> ArrayDb;
std::string name;
ArrayDb scores;
std::ostream & arr_out(std::ostream & os)const;

public:
Student() :name("Null student"),scores(){}
Student(const std::string & s):name(s),scores(){}

explicit Student(int n):name("Nully"),scores(n){}
Student(const std::string &s ,int n):name(s),scores(n){}

Student(const std::string &s ,const ArrayDb &a):name(s),scores(a){}
Student(const char *str ,const double *pd,int n):name(str),scores(pd,n){}

~Student(){}
double Average()const;
const std::string & Name() const;
double & operator[](int i);
double operator[](int i)const;
   
friend std::istream & operator>>(std::istream & is,Student & stu);
friend std::istream & getline(std::istream & is,Student & stu);
friend std::ostream & operator<<(std::ostream & os,Student & stu);


};



#endif

------解决方案--------------------
那就多看书,这些都是基础
编译预处理
""和<>的区别
友元函数
explicit 防止隐式转换
操作符重载
==都要看
------解决方案--------------------
最基本的东西,赶快找本C++补基础吧