第四章 派生类与继承(三)(3课时).ppt
文本预览下载声明
C++ 面向对象程序设计教程 实验和作业 建立普通的基类teacher,能存储教师的姓名和授课的科目;建立普通的基类student,并能存储学生的姓名、年龄、学号和专业;建立派生类score,多重继承teacher类和student类,并能存储某门课程的教师信息、学生信息和该课程的成绩。 要求建立一完整程序,给score类创建某对象,并给对象赋值(使用构造函数)且输出结果。 * * 第4章 派生类和继承 4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名成员 C++允许派生类重新说明与基类成员同名的成员,该成员将覆盖基类成员同名的成员。 为了在派生类中使用基类的同名成员,必须在成员名加上基类名和作用域标识符:: 基类名::成员名 4.3.1 同名成员 class X { public: int f(); }; class Y:public X { public: int f(); int g(); }; void Y::g() { f(); //表示访问派生类中的f(),即被调用的函数是Y::f() // 若要访问基类中的f(),应改写成X::f() } 对于派生类的对象访问: Y obj; obj.f(); // 被访问的函数是Y::f() 要访问基类声明的名字: obj.X::f() ; // 被访问的函数是X::f() 4.3.1 同名成员(续) 在面向对象程序设计中,若要对基类继承过来的某些函数功能进行扩充和改造,可以通过这样的覆盖来实现,这种方法也是对基类成员改造的关键手段。 课本 P131 例4.9 void UStudent::show() { Student::show(); cout“\n major:”majorendl; } 4.3.2 访问声明 在私有继承方式中,基类的公有成员函数变成了派生类的私有成员函数,因此派生类的对象就无法直接调用基类的成员函数,而必须借助派生类的成员函数间接调用基类的成员函数。 C++提供访问声明的特殊机制,把基类的保护成员或公有成员直接写至私有派生类定义式中的同名段中,同时给成员名前冠以基类名和作用域标识符“ ::” 。 利用该方法成员就成为派生类的保护成员或共有成员。 例 4.11 #include iostream.h class A { private: int x; public: A(int x1) {x=x1}; void print() { cout“x=“x; } }; class B:private A{ private: int y; public: B(int x1,int y1):A(x1) { y=y1; } A::print ; // 访问声明 }; main() { B b(10,20); b.print(); // 调用基类A的print return 0 ; } 程序输出结果: x=10 4.3.2 访问声明(续) ★数据成员也可使用访问声明; ★访问声明中只含不带类型和参数的函数名或变量名; ★访问声明不能改变类成员原来在基类中的成员性质,也就是说:访问声明只能把原基类的保护成员调整为派生类的保护成员,把原基类的公有成员调整为派生类的公有成员。但对基类的私有成员不能使用访问声明。 参看课本 P135 例子 4.4 多重继承 派生类只有一个基类,这种派生方法称为单基派生或单继承。 当一个派生类具有多个基类时,这种派生方法称为多基派生或多继承。 有两个以上基类的派生类声明的一般形式如下: class 派生类名:继承方式1 基类名1,…,继承方式n 基类名n{ // 派生类新增的数据成员和成员函数 }; 4.4.1 多继承的声明 冒号后面的部分称基类表,各基类之间用逗号分隔,其中“继承方式i”规定了派生类从基类中按什么方式继承:private、protected或public。默认的继承方式是private 。 P137 4.4.2 多继承的构造函数与析构函数
显示全部