c++中一个程序的有关问题

c++中一个程序的问题
写了个小程序,但是有几处不明白,请高手指点:
#include<iostream.h>
#include<string.h>
static char *copy(char *s)
{
char *temp=new char[strlen(s)+1];
strcpy(temp,s);
return temp;
}
class person
{
protected:
char *name;
int age;
public:
person() //这个函数可不可以没有呢??
{
name=0;
age=0;
}

person(char *n,int a):name(copy(n))
{
age=a;
}
~person()
{
delete name;
}
};
class student:virtual public person
{
private:
char *major;
protected:
student(char *m):major(copy(m)) //这函数什么意思??
{
}
public:
student(char *n,int a,char *m):person(n,a),major(copy(m)) //这个函数呢???
{
}
~student()
{
delete major;
}
void print()
{
cout<<name<<endl;
cout<<"age"<<age<<" "<<"major"<<major<<endl;
}
};
class faculty:virtual public person
{
protected:
char *dept;
faculty(char *d):dept(copy(d))
{
}
public:
faculty(char *n,int a,char *d):person(n,a),dept(copy(d))
{
}
~faculty()
{
delete dept;
}
void print()
{
cout<<name<<endl;
cout<<"age"<<age<<" "<<"department:"<<dept<<endl;
}
};
class professor:public faculty
{
private:
bool doctorial_tutor;
public:
professor(char *n,int a,char *dept,bool b):person(n,a),faculty(dept)
{
doctorial_tutor;
}
void print()
{
faculty::print();
if(doctorial_tutor)
cout<<"doctorial_tutor"<<endl;
}
};
class studentFaculty:public student,public faculty
{
public:
studentFaculty(char *n,int a,char *m,char *d):person(n,a),student(m),faculty(d)
{
}
void print()
{
student::print();
cout<<"department:"<<dept<<endl;
}
};
void main()
{
student myStudent("zhang",25,"computer");
faculty myFaculty("wang",35,"engineering");
professor myProfessor("li",45,"computer",true);
studentFaculty mystudentFaculty("zhao",55,"english","management");
mystudentFaculty.print();
myStudent.print();
myProfessor.print();
myFaculty.print();
}

------解决方案--------------------
//代码的组织结构很差
#include <iostream.h> //旧的方式---bad
#include <string.h> //旧的方式---bad
//这个函数的设计有问题
//一个典型的非oo思想的设计思路
//C++ 提供了string ,为啥还在 char *中转来转去呢?
static char *copy(char *s) 

char *temp=new char[strlen(s)+1]; //无异常处理-bad
//这块内存成了没娘养的孩子了
strcpy(temp,s); 
return temp; //使用静态变量保存指针-bad


class person 

protected: //貌似功能放到前面更好些
char *name; 
int age; 
public: 
person() //这个函数可不可以没有呢?? 
//可以没有,一般加上,具体为什么不说了

name=0; //初始化列表为啥不用,还在这里浪费赋值时间
age=0; 


person(char *n,int a):name(copy(n)) //参数表最好用const

age=a; //同上

~person() 

delete name; 

}; 
class student:virtual public person 

private: 
char *major; 
protected: 
student(char *m):major(copy(m)) //这函数什么意思?? 
//参数表希望用const
//后面是一种很特殊的赋值方式,C++所独有,