class Person
{
public:
    Person()
    {
        cout<<"Person"<<endl;
    }

    virtual ~Person() //如果一个类确定被继承,基类的析构函数需要定 
                      //义为虚函数,否则在析构时会出现只析构基类的 
                      //s情况。
    {
         cout<<"~Person"<<endl;
    }

    virtual void getName() = 0; //Person类存在一个纯虚函数,因而不能实例化
    virtual void getAge() //虚函数,只需要声明基类为虚函数,后续子 
                          //类不管继承多少层,不加virtual,
  			  //同样能够表现出多态性。
    {
        cout<<"Person-age"<<endl;
    }

     void getSex()
    {
         cout<<"Person-sex"<<endl;
    }
};

class Student:public Person
{
public:
    Student()
    {
         cout<<"Stuent"<<endl;
    }

    ~Student()
    {
         cout<<"~Stuent"<<endl;
    }

    void getName()
    {
        cout<<"Stuent-name"<<endl;
    }

    void getAge()
    {
        cout<<"Stuent-age"<<endl;
    }

    void getSex()
    {
        cout<<"Stuent-sex"<<endl;
    }

};

class CollegeStudent:public Student
{
public:

    CollegeStudent()
    {
         cout<<"CollegeStudent"<<endl;
    }

    ~CollegeStudent()
    {
         cout<<"~CollegeStudent"<<endl;
    }

    void getName()
    {
        cout<<"CollegeStudent-name"<<endl;
    }

    void getAge()
    {
        cout<<"CollegeStudent-age"<<endl;
    }

     void getSex()
    {
        cout<<"CollegeStudent-sex"<<endl;
    }
};


int main()
{
    /*
    *构造函数顺序为Person->student->collegeStudent
    *析构函数顺序为~collegeStudent->~student->~Person
    */
    Person* collegeStudent = new CollegeStudent();
    collegeStudent->getName();
    collegeStudent->getAge();
    collegeStudent->getSex();
    delete collegeStudent;
    return 0;
    //输出结果为:(Mac平台输出)
    //@"Person\r\n"
    //@"Stuent\r\n"
    //@"CollegeStudent\r\n"
    //@"CollegeStudent-name\r\n"
    //@"CollegeStudent-age\r\n"
    //@"Person-sex\r\n"
    //@"~CollegeStudent\r\n"
    //@"~Stuent\r\n"
    //@"~Person\r\n"
	
}