继承与派生
- 格式:doc
- 大小:405.50 KB
- 文档页数:2
第七章继承和派生一、基类和派生类1. 在C++中,可以从一个类派生出另一个类,前者称为基类或父类,后者称为派生类或子类。
一个派生类可以从一个或多个基类派生。
从一个基类派生的继承称单继承,从多个基类派生的继承称多继承。
2. 单继承定义格式:class 派生类:继承方式基类{ 派生类新定义成员;};其中,“派生类”是从“基类”按指定的“继承关系”派生出的、新定义的一个类的名字。
“继承方式”有三种:(1)public 公有继承(2)private 私有继承(3) protected 保护继承3. 多继承定义格式:class 派生类:继承方式1 基类1,继承方式2 基类2,…{ 派生类新定义成员;};4. 公有继承:当派生类的继承方式是public继承时,基类的public和protected成员的访问属性在派生类中保持不变,而基类的private成员不可访问,即基类的public和protected成员分别作为派生类的public和protected成员,派生类的其他成员可以直接访问它们。
例1:class B{ private: int x; protected: int y; public: int z;…};class A:public B{ private: int a; protected: int b; public: int c;…}; A a;(1)类B是基类,有3个数据成员x、y、z,分别是private、protected、public属性。
类A是派生类,有3个数据成员a、b、c,分别是private、protected、public属性。
由于类A是从类B公有派生的,类B中的public、protected属性的成员可继承到类A中来,且保持原来的属性。
故类A中有5个数据成员,即a、b、c、y。
(2)可以通过类A的对象a直接访问public成员,即z和c,并不能访问a、b、y数据成员。
继承和派生一.继承(inheritance):在一个已存在的类的基础上建立一个新的类。
在c++中可重用性是通过继承这一机制实现的。
派生(derived):在已有类的基础上新增自己的特性而产生新类的过程。
共享基类的成员。
派生类不会继承基类的友元关系。
派生类同时也是一个组合:创建一个新类,类中的一个或者多个对象是其他类的成员。
被继承的类称为基类(base class),派生出的类称为派生类(derived class)。
一个派生类可以从一个基类派生,称之为单继承。
也可以从多个基类派生,称之为多继承。
派生过程基类不会作出改变。
派生类则除了继承基类所有可引用的成员外,还可以另外定义新的成员。
继承首先是代码重用的一种机制,但另一个重要的特性在于:继承描述了一组类,这组类在一个相关联的层次上,一个类可以看作是另一个类。
二.继承的目的:实现代码重用。
通过继承机制,可以利用已有的数据类型来定义新的数据类型。
派生的目的:当新的问题出现,原有程序无法解决时,对原有程序进行改造。
三.派生类的声明Class 派生类名:继承方式基类名{派生类新增加的成员声明;}派生类一部分是从基类继承的成员,一部分是在声明派生类时新增加的部分。
四.派生生成过程。
1.吸收基类成员:吸收除构造函数和析构函数外的数据。
2.改造基类成员:声明一个和基类成员同名的新成员,派生类中的新成员就屏蔽了基类同名成员称之为同名覆盖。
这里的屏蔽或者覆盖并不是真正意义上的覆盖,依然可以通过基类名加作用域操作符(::)进行访问。
3.发展新成员:派生类新增加的成员。
新增加的成员需与基类成员不同命。
4.重写构造函数和析构函数:被重新定义的基类函数是虚函数,则称派生类中同名函数为重写。
派生类不会继承基类的构造函数和析构函数。
五.继承方式:继承方式不同影响派生类成员对基类成员访问权限。
1.Pubulic access(公有继承):派生类继承基类的public和protected 且访问属性不变。
派生与继承的关系,及派生应用中要注意的问题
派生(也称为继承)是面向对象编程中的一个重要概念,它允许一个类(派生类或子类)继承另一个类(基类或父类)的属性和方法。
派生与继承的关系如下:
1. 代码重用:通过继承,派生类可以复用基类的代码,减少代码重复。
2. 扩展性:派生类可以在继承基类的同时添加新的属性和方法,以实现更复杂的功能。
3. 多态性:通过继承,可以实现多态性,即父类指针或引用可以指向子类对象,调用子类的方法。
在派生应用中,需要注意以下几个问题:
1. 封装性:要确保基类的属性在派生类中仍然保持封装性,即不要在派生类中直接访问基类的私有属性。
2. 构造函数:如果基类有构造函数,派生类需要显式调用基类的构造函数,或者在派生类的构造函数中实现与基类构造函数相同的功能。
3. 虚函数和纯虚函数:如果基类中有虚函数或纯虚函数,派生类需要实现这些函数或者声明这些函数为纯虚函数。
4. 访问权限:要确保派生类中的成员函数能够访问基类的公有成员和保护成员,但不能访问基类的私有成员。
5. 覆盖和隐藏:如果基类和派生类中有同名函数,则派生类中的函数会覆盖基类中的函数(也称为重写)。
如果基类中的函数是公有或保护的,而派生类中的函数是私有的,则称为隐藏。
覆盖和隐藏可能会引起一些问题,需要注意区分和处理。
实验四继承与派生
实验名称:继承与派生学时安排:4
实验类别:设计性实验实验要求:1人1组
一、实验目的和任务
1.理解继承的含义;
2.学习从现有类派生出新类的方式;
3.了解在派生类中如何使用基类的成员。
二、实验设备介绍
软件需求: Visual C++ 6.0或VS2008
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB 以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
三、实验内容和步骤
1.新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别,姓名,输入雇员资料方法,打印雇员资料方法。
2.以此雇员类为基类,从中派生出教师类,其中要求在教师类中加入一个计算教师工资的方法,教师工资=基本工资(1000)+课时(月工作量)×30。
3.以此雇员类为基类,从中派生出实验员类,其中要求在实验员类中加入一个计算实验员工资的方法,实验员工资=基本工资(800)+实验室补助(150)+值班课时(月工作量)×5。
4. 以此雇员类为基类,从中派生出行政人员类,其中要求在行政人员类中加入一个计算行政人员工资的方法,行政人员工资=基本工资(2000)+行政补贴(200)。
5.编写一个完整的程序,要求用户从键盘输入雇员的信息,然后在屏幕显示这些信息。
【任务分解】
【程序示例】
文件Employee.h
class Employee
{
protected:
//补充完成数据成员定义
public:
……
void inputEmployee(); // 用户从键盘输入雇员姓名和受聘日期
void showEmployee(); // 显示雇员姓名和受聘日期
};
文件Teacher.h
#include "Employee.h"
class Teacher:补充完成代码
{
private:
// 补充完成数据成员定义:如基本工资、课时量。
public:
……
void inputData();
void showData ();
void calPay(); //计算工资
};
文件Run.cpp
#include " Teacher.h"
#include <iostream>
using namespace std;
int main()
{
Teacher t1;
t1. inputData ();
t1. showData ();
return 0;
}。