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

c++中一个程序的问题写了个小程序,但是有几处不明白,请高手指点:#includeiostream.h#includestring.hs

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++所独有,


//这里用在初始化列表中
// int a,b; b=2; a(b);


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 //貌似虚基类的用法不是你这样用的吧,呵呵
/*

person
/ \
V V
/ \
student faculty 
\ / \
\ / professor
studentFaculty

 

可怕的继承关系,呵呵
*/

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(); 
}