正在加载图片...
第8单元类与对象(I) 155 class<派生类名>:<访问权限〉<基类名〉 其中访问权限可以是关键字 public或 private之一。如果为 public,称派生类从基类公有派生; 如果为 private,称派生类从基类私有派生。 公有派生时,基类成员的访问权限在派生类中保持不变,即原来基类中的私有成员在派 生类中仍为私有成员;原来基类中的公有成员在派生类中仍为公有成员。这就意味着在派生 类外可以访问其从基类继承下来的公有成员。然而,对基类而言,派生类也是其“外部” 因此在派生类中不能直接访问基类中的私有成员,也必须通过基类所提供的公共接口(成员 函数)才可以访问基类中的私有成员。 私有派生时,基类中所有成员的访问权限在派生类中均为私有。即从派生类外部来看, 其基类的所有成员均不可见。因此,为了对基类中的数据成员进行操作,在派生类中必须声 明相应的公有成员函数 在类声明中,声明为 protected的成员称做保护成员。保护成员具有双重作用:对于其 派生类而言,它是公有的:而对于其外部的程序而言,则是私有的。通常,如果一个类主要 是作为基类以供派生新类而用,则其数据成员声明成保护的比较方便。但在这种情况下,如 果由于某种原因而改变了保护成员的表示形式,则这些改变也要影响到派生类。因此,在实 用中应仔细权衡程序的效率与程序的可维护性,以决定是否采用保护成员 在C+中,还有所谓抽象类。抽象类只能作为基类派生新类,在程序中不能声明抽象 类的对象。有多种因素可以使得一个类成为抽象类,例如使用保护的构造函数。保护的构造 函数对除该类的派生类以外的所有外部程序来讲是私有的,所以,外部程序由于无法调用该 构造函数而不能创建该类的对象。对该类的派生类来讲,该构造函数却是公有的,因而在创 建其派生类的对象时就可以调用它为基类成员分配内存 保护的析构函数同样阻止了在撤消对象时对它的调用,因此,如果一个类的析构函数被 声明为保护的,则该类也是一个抽象类 例8-11从 Person类公有派生一个职员类 / Example8-1:职员类 class Employee: public Person char m dEpartment [21] char m sPosition [21] float fSalary public ployee o仆} Employee(const char * int, char, const char * const char * float (const char * void SetPosition(const char *第 8 单元 类与对象(II) - 155 - class <派生类名>:<访问权限> <基类名> { ... ... }; 其中访问权限可以是关键字 public 或 private 之一。如果为 public,称派生类从基类公有派生; 如果为 private,称派生类从基类私有派生。 公有派生时,基类成员的访问权限在派生类中保持不变,即原来基类中的私有成员在派 生类中仍为私有成员;原来基类中的公有成员在派生类中仍为公有成员。这就意味着在派生 类外可以访问其从基类继承下来的公有成员。然而,对基类而言,派生类也是其“外部”, 因此在派生类中不能直接访问基类中的私有成员,也必须通过基类所提供的公共接口(成员 函数)才可以访问基类中的私有成员。 私有派生时,基类中所有成员的访问权限在派生类中均为私有。即从派生类外部来看, 其基类的所有成员均不可见。因此,为了对基类中的数据成员进行操作,在派生类中必须声 明相应的公有成员函数。 在类声明中,声明为 protected 的成员称做保护成员。保护成员具有双重作用:对于其 派生类而言,它是公有的;而对于其外部的程序而言,则是私有的。通常,如果一个类主要 是作为基类以供派生新类而用,则其数据成员声明成保护的比较方便。但在这种情况下,如 果由于某种原因而改变了保护成员的表示形式,则这些改变也要影响到派生类。因此,在实 用中应仔细权衡程序的效率与程序的可维护性,以决定是否采用保护成员。 在 C++中,还有所谓抽象类。抽象类只能作为基类派生新类,在程序中不能声明抽象 类的对象。有多种因素可以使得一个类成为抽象类,例如使用保护的构造函数。保护的构造 函数对除该类的派生类以外的所有外部程序来讲是私有的,所以,外部程序由于无法调用该 构造函数而不能创建该类的对象。对该类的派生类来讲,该构造函数却是公有的,因而在创 建其派生类的对象时就可以调用它为基类成员分配内存。 保护的析构函数同样阻止了在撤消对象时对它的调用,因此,如果一个类的析构函数被 声明为保护的,则该类也是一个抽象类。 [例 8-1] 从 Person 类公有派生一个职员类。 // Example 8-1:职员类 class Employee:public Person { char m_sDepartment[21]; char m_sPosition[21]; float m_fSalary; public: Employee(){} Employee(const char *,int,char,const char *,const char *,float); void SetDepartment(const char *); void SetPosition(const char *);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有