Tuesday 24 April 2007

继承

***继承,面向对象程序设计的上方宝剑,有了它上下通吃---Skyala***


人(类)->父母(对象)->子女(继承、多重继承)->子孙(多态性)---哇,My God!多么完美的曲线!



*****************************声明****************************
1. 继承的概念及重要性
2. 基类
3. 派生类
4. 基类 VS 派生类
5. 多重继承

基类、派生类与指针、对象的关系
* 基、派指针可分别直接引用基、派对象 time * t,c; t=&c; t->(c中的成员)
* 基类指针可引用派生类对象,即派生类指针可直接赋给基类指针,引用的成员只能是基类部分
time * t;c2; t= &c2, t->c2(其内的基类成员)
* 派生类指针不能直接引用基类对象(类型的包容性不同),即基类指针不能直接赋给派生类指针。必先转换:基类对基类,派生类对派生类或派生对基(同2).

time * t,c; time2 * t2,c2; t2 =&c(错误的).
改变1:
t=&c;t2 = (time2 *)t 等价于t2 = (time2 *)&c 强制基类指针为转换为派生类指针再赋给派生类 t = &c2;
改变2:t2 = (time2 *)&t


*****************************定义****************************
1. 继承的概念及重要性
  inheritance :是软件重用的一种形式,将相关的类组织起来,并分亨其间的共通数据和操作行为。
  最具吸引力的特点:新类可以从现有的类库中继承。提倡建立与现有的类有许多共性的新类来实现软件的重用
  能添加基类的所没有的特点以及取代和改进从基类继承来的特点
  单重继承形成树状层次结构,由基类和派生类构成了一种层次关系,继承的层次在系统的限制范围内是任意的。
继承机制定义了父子关系
2.基类
* 父类定义了所有子类共通的对外接口和私有实现内容,父类被称为基类
* 成员函数:
基类的私有成员只能被基类的成员函数和友元访问
基类的受保护成员只能被基类及派生类的成员函数和友元访问
* 继承基类的方式
public公有继承使用最多,公对公,受保护受保护,私不用 
protected:公、保护对保护, private :公、保护对私


3.派生类
* 新类继承预定义基类的数据成员和成员函数,而不必重新编写数据成员和成员函数,这种新类叫派生(derived)类
* 派生类永远不能直接访问基灶的私有成员
* 重定义函数
派生类中无需继承的功能及要扩充的基类功能可以重定义成员函数,但在派生类再调用基类的同名函数时要用到作用域运算符Employee::print()
* 派生类的构造函数和析构函数
  由于派生类继承了基类的成员,所以在建立派生类的实例对象时,必须调用基类的构造函数来初始化派生类对象中的基类成员。可隐式的调用基类构造函数,也可在派生类的构造函数中通过给基类提供初始化值(成员初始化值列表)明确的调用构造函数
  构造函数调用顺序,先执行基类的构造函数->派生类的成员对象构造函数 ->派生类构造函数
  析构函数调用顺序正好相反。
++++++++++ 切记:派生类不继承基类的构造函数、析构函数和赋值运算符,但派生类的构造函数和赋值运算符能调用基类的构造函数和赋值运算符






No comments:

Post a Comment