一个关于派生类继承父类私有属性的有关问题 请问

一个关于派生类继承父类私有属性的问题 请教
父类
class   People   {
public:
      People(char   *str); //构造函数
      ~People(); //析构函数
protected:
      char   *name;
};
#endif
父类实现:
{
People::People(char   *str)   {
      name   =   new   char[strlen(str)+1];
      strcpy(name,   str);
      cout < < "People   construct:   " < <name < <endl;
}
//析构函数的实现
People::~People()   {
      cout < < "People   destroy:   " < <name < <endl;
      delete   []name;
}People::People(char   *str)   {
      name   =   new   char[strlen(str)+1];
      strcpy(name,   str);
      cout < < "People   construct:   " < <name < <endl;
}
//析构函数的实现
People::~People()   {
      cout < < "People   destroy:   " < <name < <endl;
      delete   []name;
}

派生类:
class   Teacher   :   public   People   {
public:
      Teacher(char   *str,   char   *sch); //构造函数
      ~Teacher(); //析构函数
protected:
      char   *school;
};
派生实现
Teacher::Teacher(char   *str,   char   *sch)
:People(str) //调用基类的构造函数
{     school   =   new   char[strlen(sch)+1];
      strcpy(school,sch);
      cout < < "Teacher   construct:   " < <name < < "   in   "------1
              < <school < <endl;
}
Teacher::~Teacher()   {
      cout < < "Teacher   destroy:   " < <name < < "   in   "-----------2
              < <school < <endl;
      delete   []school;     }


父类成员name必须为保护类型,才能在派生类的构造,析构函数中   1,2处   用到name。改为私有类型,子类中就无法访问。     但是子类继承时也有自己的name属性   继承过来,为什么不能调用,   1,2处调用的name是父类的还是子类的?


------解决方案--------------------
首先子类会继承父类的所有数据成员。公有继承以为着B是一个A,即teacher是一个people,所以name属性是teacher和people都拥有的属性,不能说是谁就是谁的了。

但是父类的private成员子类无权过问,“私有”的意义就在于独自占有。既然如此为什么还要继承private成员呢? C++的语义支持把一个子类转换成一个父类,如果子类丢失了父类的某个数据成员,怎么能成功转换呢?


------解决方案--------------------
//假设有类Base和Drived如下:
class Base
{
private:
char name[10];
};
class Drived:public Base
{
//不论是public继承还是private继承,Drived对象的内存布局
//都与下面的Drived_likeness一样,所不同的是可访问性和对name的操作.
//因为这里的name来自Base,如果name在Base中被声明为private的,
//那么,虽然Drived对象中有name的位置,但不能直接访问.所有对name的
//操作都要依靠基类的非私有函数.
//如果name在Base中被声明为protected的或public的,本类的函数就可以
//访问了. 如果是private继承,name的可访问性就变为private的,public继承则
//name可访问性不变(但若name在基类中就是private的,则不可访问).
//错误观点1:如果是私有的父类成员,那么子类是不可能继承的吧。
//这个话好象是在说Drived中就没有name的位置,所以错.
//错误观点2:子类继承后相当于一个引用一样,调用的时候还是用到父类的定义
//怎么扯到引用上去了呢
//再强调一启遍:子类对象也是一个整体,包括从父类继承部分(如本例中的name)
//和自己新增部分(如本例中的age)
private:
int age;
};
class Drived_likeness