C++继承与派生试卷.ppt

8.4.2 基类到派生类的转换 C++编译器可以自动将派生类对象转换为基类对象(隐式类型转换) 从基类到派生类的自动转换是不存在的 //以下代码仅为示例 TShape s; TCircle c = s; //错误!不能将基类转换为派生类 TCircle* pc = s; //错误!不能将基类转换为派生类 TCircle rc = s; //错误!不能将基类转换为派生类 总结 类的继承性及其相关概念 派生类可以以公有、保护和私有3种方式继承基类 派生类能够继承基类中除构造函数和析构函数之外的所有成员 派生类定义自己的构造函数和析构函数。在定义派生类的构造函数时,不仅要考虑派生类新增数据成员的初始化,还要注意在成员初始化列表中对基类构造函数的调用和内嵌对象数据成员进行初始化。 * * 新类继承了基类的属性和行为 新类是基类的特殊情况。 继承 使得程序员可以利用已有的代码 继承是处理“特殊情况”的面向对象编程机制 * * * 不同的继承方式使得派生类从基类继承的成员具有不同的访问控制权限,以实现数据的安全性和共享性控制。 * * 使用派生类的 对象 只能访问基类的public成员 * * * 如果此处填private,那么在 class Rect中的 X=x; Y=y 会出错; 将private 改成public,那么在 class Rect中的 X=x; Y=y 不会出错;但是同样 coutr.X也不会出错 只有将此处填protected,在class Rect中的X=x; Y=y 不会出错;而只有 main中第三行汇报错 * 对于任意继承方式,基类的私有成员对于派生类是“不可访问的”。 对于公共继承方式,基类的公共成员为派生类的公共成员,基类的保护成员为派生类的保护成员。 对于保护继承方式,基类的公共的和保护的成员变为派生类的保护成员。 对于私有继承方式,基类的公共的和保护的成员变为派生类的私有成员。 * 答案B * * * * * * * * * * * * * * * * 继承方式影响访问控制 public: protected: private: public public protected private protected protected protected private private private private private 基类存取方式 继承类型 派生类继承的基类成员的访问属性 * 北京邮电大学信息与通信工程学院 -*- 8.2.4 同名覆盖 8.2.4 同名覆盖 override class base { public: void f ( ) {coutbaseendl;} }; class deriver: public base { public: void f ( ) {coutderiverendl;} }; int main( ) { deriver derobj; derobj.f (); return 0; } 输出结果? A: base B: deriver 在派生类中声明了一个与基类成员同名的新成员 OverRide 只能访问到派生类中的同名新成员 在派生类作用域内或者 在类外通过派生类的对 象直接使用这个成员名 class Shape { public: ┇ void Draw(){ }; protected: ┇ }; class Triangle: public Shape { public: Triangle( int x, int y, char color=R, float slen = 1 ); float GetSideLength( ) const; void SetTriangle( int x, int y, char color, float slen ); void Draw( ); private: float m_SideLength; }; 图形类中的同名覆盖 * 北京邮电大学信息与通信工程学院 -*- 8.3 构造函数和析构函数 8.3 构造函数与析构函数 基类的构造函数和析构函数不能被派生类所继承 派生类一般需要定义自己的构造函数和析构函数 派生类的构造及析构函数通常会受到基类构造及析构函数的影响 * 北京邮电大学信息与通信工程学院 -*- 8.3.1 基类只有无参数构造函数 8.3.1 基类只有无参数的构造函数 在基类具有无参构造函数,派生类又没有定义构造函数的时候,系统会自动的调用基类无参构造函数,来构造派生类对象中的基类成分。 如果基类没有无参构造函数,派生类也不定义自己的构造函数

文档评论(0)

1亿VIP精品文档

相关文档