C++ 类的继承和派生ppt
合集下载
C第11章继承与派生PPT课件
一个基类可以派生出多个派生类,每一个派 生类又可以作为基类再派生出新的派生类
继承的分类
❖单继承:一个派生类只从一个基类派生 ❖多继承:一个派生类从多个基类派生
单继承
多继承
大学在册人员实例
教职工(单继承)
在册人员 学生(单继承)
兼职教师(单继承)
教师(单继承) 工人(单继承) 行政人员(单继承) 研究生(单继承)
大多数工程都尽可能使用可以重用的部件
软件重用在以下层次中
❖代码
❖功能 ❖模块或类
难度增加
❖子系统
❖应用系统
C++提供的大量库函数是在功能级的重用
MFC、OLE、ActiveX是在类一级的重用
软件重用的含义 简单而言,就是以现成的程序模块为基础,实现新的应用系统
小型模块重用的示例 ❖各种库函数
❖在类中包含C另一+个+类的支对象持成员重用的机制 重用的关注点: --类的继承
int num; 这是“对象组合”的限制
类s的trin“g n继am承e; ”机制能通过“剪裁”派生需要的类
char sex;
BirthDate birthday;
};
§ 继承与派生的概念
继承就是在一个已存在的类的基础上建立一 个新的类
已存在的类称为基类(base class)或父类 (father class)
private: 子对象是“部件”
int int
ymeoanr;th组; 合产生的新类对象“包含”子对象,因此
int day; ❖新类对象具有子对象的属性和功能
}; class
Teacher//❖教新师类类对象能增加新属性与新功能
{ public: ❖新类对象不能“修改”子对象的功能
继承的分类
❖单继承:一个派生类只从一个基类派生 ❖多继承:一个派生类从多个基类派生
单继承
多继承
大学在册人员实例
教职工(单继承)
在册人员 学生(单继承)
兼职教师(单继承)
教师(单继承) 工人(单继承) 行政人员(单继承) 研究生(单继承)
大多数工程都尽可能使用可以重用的部件
软件重用在以下层次中
❖代码
❖功能 ❖模块或类
难度增加
❖子系统
❖应用系统
C++提供的大量库函数是在功能级的重用
MFC、OLE、ActiveX是在类一级的重用
软件重用的含义 简单而言,就是以现成的程序模块为基础,实现新的应用系统
小型模块重用的示例 ❖各种库函数
❖在类中包含C另一+个+类的支对象持成员重用的机制 重用的关注点: --类的继承
int num; 这是“对象组合”的限制
类s的trin“g n继am承e; ”机制能通过“剪裁”派生需要的类
char sex;
BirthDate birthday;
};
§ 继承与派生的概念
继承就是在一个已存在的类的基础上建立一 个新的类
已存在的类称为基类(base class)或父类 (father class)
private: 子对象是“部件”
int int
ymeoanr;th组; 合产生的新类对象“包含”子对象,因此
int day; ❖新类对象具有子对象的属性和功能
}; class
Teacher//❖教新师类类对象能增加新属性与新功能
{ public: ❖新类对象不能“修改”子对象的功能
C语言程序设计PPT第七章继承与派生
cout<<"C's constructor called."<<endl; } C::~C() { cout<<"C's destructor called."<<endl; } void C::Print() const { B::Print(); cout<<c<<endl; } int main() { C obj(5,6); obj.Print(); }
问 控 制
类中的public和protected成员,但 不能直接访问基类的private成员。
通过派生类的对象不能直接访问基类 中的任何成员
17
C++语言程序设计
protected 成员的特点与作用
类
成 对建立其所在类对象的模块来说,它
员 与 private 成员的性质相同。
的 对于其派生类来说,它与 public 成 访 员的性质相同。
public成员。
10
C++语言程序设计
例7-1 公有继承举例
类 成 员
class Point //基类Point类的声明 {public: //公有函数成员
void InitP(float xx=0, float yy=0)
的
{X=xx;Y=yy;}
访 void Move(float xOff, float yOff)
25
C++语言程序设计
多继承时派生类的声明
单
继 class 派生类名:继承方式1 基类名1,
承 继承方式2 基类名2,...
与{
多
成员声明;
问 控 制
类中的public和protected成员,但 不能直接访问基类的private成员。
通过派生类的对象不能直接访问基类 中的任何成员
17
C++语言程序设计
protected 成员的特点与作用
类
成 对建立其所在类对象的模块来说,它
员 与 private 成员的性质相同。
的 对于其派生类来说,它与 public 成 访 员的性质相同。
public成员。
10
C++语言程序设计
例7-1 公有继承举例
类 成 员
class Point //基类Point类的声明 {public: //公有函数成员
void InitP(float xx=0, float yy=0)
的
{X=xx;Y=yy;}
访 void Move(float xOff, float yOff)
25
C++语言程序设计
多继承时派生类的声明
单
继 class 派生类名:继承方式1 基类名1,
承 继承方式2 基类名2,...
与{
多
成员声明;
C 复习3----类的继承与派生PPT
组合也是构建新类的重 要手段,主要通过包含 一个已经存在的类对象 构建新类。
组合是将一些相对简单 的对象组合成为复杂的 对象。
Public:
Run() { cout<<“This Car is runing.”
<<endl;}
}
什么情况下使用继承
在继承层次结构图中,居于顶层的类更具“一 般性”,是其子类共同特性的抽象,反之,沿 着继承树的分支向下延伸,下层的类变的更加 “具体化”。 使用继承来创建类要考虑: 新类是否需要使用已知类的“全部”成员。 是否能将已知类的共有成员提取。 使用组合是否可以代替,若能则使用组合。
class Person { public: void print() { cout<<"Person.print"<<endl;} }; class Student:public Person //Student继承Person { void show() {cout<<"Student. show "<<endl; } }; void fun(Person &p) //参数是基类指针 { p.print(); }
在什么情况下使用继承,什么情况下使用组 合,是面向对象程序设计的重要机制。
什么情况下使用组合
当一个类是由其它Βιβλιοθήκη 的Class Car对象组合而成,且具有 部分与整体关系,就可 以使用组合。
{
Body body; Wheel wheel[4] Door left,right; Engine engine;
void main() { Person person; //类Person实例化成对象person Student student; //类Student实例化成对象 student fun(student); //参数是对象student fun(person); //参数是对象person }
继承与派生类PPT演示课件
第7章 继承与派生类
7.1 基本概念 7.2 派生类的三种继承方式 *7.3 多 重 继 承 与虚基类 习题
1
7.1 基本概念
1、继承与派生
继承是面向对象语言提供的一个重要机制,它在类与类之 间建立了层次关系。首先从下面的实例当中体会继承的概念。
class Box
{
private :
int width,height;
{…
};//同上
10
void main( )
{
ColorBox ob1;
ob1.SetWidth(1);
ob1.SetHeight(2);
ob1.SetColor(3);
ColorBox ob2;
ob2.Width = 1 ; //非法
ob2.color = 3; //×
}
如果在ColorBox内有另外一个成员函数,它能否
12
3、保护成员
用protected说明的成员称为保护成员,保护成员的访问 权限介于私有和公有之间。其规则为:
派生类的成员函数可以访问基类的保护成员,但是在基 类和派生类之外,程序不能访问类的保护成员。
class Box { protected :
int width,height; };
13
class ColorBox :public Box { private :
class Box
{
private :
int width,height;
public:
void SetWidth(int w) { width = w;}
void SetHeight(int h) {height = h;}
};
//同上
7.1 基本概念 7.2 派生类的三种继承方式 *7.3 多 重 继 承 与虚基类 习题
1
7.1 基本概念
1、继承与派生
继承是面向对象语言提供的一个重要机制,它在类与类之 间建立了层次关系。首先从下面的实例当中体会继承的概念。
class Box
{
private :
int width,height;
{…
};//同上
10
void main( )
{
ColorBox ob1;
ob1.SetWidth(1);
ob1.SetHeight(2);
ob1.SetColor(3);
ColorBox ob2;
ob2.Width = 1 ; //非法
ob2.color = 3; //×
}
如果在ColorBox内有另外一个成员函数,它能否
12
3、保护成员
用protected说明的成员称为保护成员,保护成员的访问 权限介于私有和公有之间。其规则为:
派生类的成员函数可以访问基类的保护成员,但是在基 类和派生类之外,程序不能访问类的保护成员。
class Box { protected :
int width,height; };
13
class ColorBox :public Box { private :
class Box
{
private :
int width,height;
public:
void SetWidth(int w) { width = w;}
void SetHeight(int h) {height = h;}
};
//同上
继承与派生课件
{
public:
void display() const {cout<<"Base1::display()"<<endl;}
//公有成员函数
};
继承与派生
23
class Base2: public Base1 //公有派生类Base2定义 { public: void display() const {cout<<"Base2::display()"<<endl;} //公
private private 不可访问
保护继承 (protected)
public protected
protected protected
private
不可访问
继承与派生
21
类型兼容规则
类 • 一个公有派生类的对象在使用上可以被当作基
型 类的对象,反之则禁止。具体表现在:
兼
• 派生类的对象可以隐含转换为基类对象。
A(int i,int j){this->i = i;this->j = j;}
int GetI(){return i;}
int GetJ(){return j; }
};
class B:public A{ private:
添加新成员
int k;
public:
B(int i,int j,int k):A(i,j){this->k = k;}
initPoint(x, y); //调用基类公有成员函数
this->w = w;
this->h = h;
}
void move(float offX, float offY) {
public:
void display() const {cout<<"Base1::display()"<<endl;}
//公有成员函数
};
继承与派生
23
class Base2: public Base1 //公有派生类Base2定义 { public: void display() const {cout<<"Base2::display()"<<endl;} //公
private private 不可访问
保护继承 (protected)
public protected
protected protected
private
不可访问
继承与派生
21
类型兼容规则
类 • 一个公有派生类的对象在使用上可以被当作基
型 类的对象,反之则禁止。具体表现在:
兼
• 派生类的对象可以隐含转换为基类对象。
A(int i,int j){this->i = i;this->j = j;}
int GetI(){return i;}
int GetJ(){return j; }
};
class B:public A{ private:
添加新成员
int k;
public:
B(int i,int j,int k):A(i,j){this->k = k;}
initPoint(x, y); //调用基类公有成员函数
this->w = w;
this->h = h;
}
void move(float offX, float offY) {
零点起飞学C之继承和派生.pptx
第15章 继承和派生
• 继承和派生是父类和子类之间的关系,是从两个不同角度 谈同一件事情。继承让子类可以获得父类的特性,派生让 父类可以将自己的特性遗传给子类。学习本章,读者可以 设计出更加满足实际需要的类,在更高的抽象层次上考虑 和解决问题,从而应对更复杂的实际需要。
15.1 由类生成类
• 派生和继承都是在描述同一件事情,它们是从两个角度来 谈父类和子类的关系。
• 例如,定义动物类animal,从animal派生子类dog。在这个过程 中,父类animal派生了子类dog,或者说子类dog继承于父类 animal。从animal还可以派生cat或chick等子类。子类也可以继 续派生。例如,dog可以继续派生policedog、armydog等具体的 类。从这个过程可以看出,子类和父类是一个相对的概念。dog 是animal的子类,又是policedog的父类。
• 类的派生格式如下:
• class 子类:<派生方式>基类 •{ • ... • };
• 类的派生仅是在声明类时增加“:<派生方式>基类”。“:”表 示前面的类派生于后面的基类,“派生方式”规定了子类如何 继承基类的成员。子类自动接收了全部基类的成员,但构造函 数和析构函数是不能被继承的,派生类要重新定义构造函数和 析构函数。
【示例15-1】
• 演示类成员的限定符用法。
• class CPerson •{ • public: • CPerson(); • virtual ~CPerson(); • protected: • string m_name; • bool m_sex; • short m_age; • public: • int GetVersion(char *info); • private: • string m_ver; • };
• 继承和派生是父类和子类之间的关系,是从两个不同角度 谈同一件事情。继承让子类可以获得父类的特性,派生让 父类可以将自己的特性遗传给子类。学习本章,读者可以 设计出更加满足实际需要的类,在更高的抽象层次上考虑 和解决问题,从而应对更复杂的实际需要。
15.1 由类生成类
• 派生和继承都是在描述同一件事情,它们是从两个角度来 谈父类和子类的关系。
• 例如,定义动物类animal,从animal派生子类dog。在这个过程 中,父类animal派生了子类dog,或者说子类dog继承于父类 animal。从animal还可以派生cat或chick等子类。子类也可以继 续派生。例如,dog可以继续派生policedog、armydog等具体的 类。从这个过程可以看出,子类和父类是一个相对的概念。dog 是animal的子类,又是policedog的父类。
• 类的派生格式如下:
• class 子类:<派生方式>基类 •{ • ... • };
• 类的派生仅是在声明类时增加“:<派生方式>基类”。“:”表 示前面的类派生于后面的基类,“派生方式”规定了子类如何 继承基类的成员。子类自动接收了全部基类的成员,但构造函 数和析构函数是不能被继承的,派生类要重新定义构造函数和 析构函数。
【示例15-1】
• 演示类成员的限定符用法。
• class CPerson •{ • public: • CPerson(); • virtual ~CPerson(); • protected: • string m_name; • bool m_sex; • short m_age; • public: • int GetVersion(char *info); • private: • string m_ver; • };
C程序设计第9章 继承与派生类PPT课件
12
1.吸收基类成员 在C++的类继承中,第一步是将基类 的成员全盘接收,这样,派生类实际上就包含了它的所
有基类中除构造和析构函数之外的所有成员。
2.改造基类成员 对基类成员的改造包括两个方面,一 个是基类成员的访问控制问题,主要依靠派生类声明时
的继承方式来控制 。
3.添加新的成员 派生类新成员的加入是继承与派生机
制的核心,是保证派生类在功能上有所发展的关键。
本章的内容基本上是按照派生的这三个步骤组织的。第
一步实际在声明派生类之后自动完成了,程序员无法干
预,我们也不再做深入讨论。第二个步骤中我们着重学
习不同继承方式下的基类成员的访问控制问题。在第三
步中,重点放在了构造函数和析构函数上,其他一般成
员的添加方法和规则与我们新声明一个类时完全相同。
第9章 继承与派生类
9.1 继承的基本概念 9.2 访问控制 9.3 派生类的构造和析构函数 9.4 派生类成员的标识与访问 9.5 赋值兼容规则 9.6
1
教学目的
1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解公有继承下基类成员对派生类成员和派生类
对象的可见性,能正确地访问继承层次中的各种类 成员; 3.理解保护成员在继承中的作用,能够在适当的时 候选择使用保护成员以便派生类成员可以访问基类 的部分非公开的成员; 4. 理解虚函数在类的继承层次中的作用,虚函数的 引入对程序运行时的影响,能够对使用虚函数的简 单程序写出程序结果
10
在派生类的声明中,除了要指定基类外, 还需要指定继承方式。继承方式规定了如 何访问从基类继承的成员。在派生类的声 明中,每一个“继承方式”只限定紧随其 后的基类。继承方式关键字为public, protected和private,分别表示公有继承、 保护继承和私有继承。如果不显式地给出 继承方式关键字,系统的默认值就认为是 私有继承(private)。类的继承方式指定了派 生类成员以及类外对象对于从基类继承来 的成员的访问权限,这将在下一节详细介 绍。
1.吸收基类成员 在C++的类继承中,第一步是将基类 的成员全盘接收,这样,派生类实际上就包含了它的所
有基类中除构造和析构函数之外的所有成员。
2.改造基类成员 对基类成员的改造包括两个方面,一 个是基类成员的访问控制问题,主要依靠派生类声明时
的继承方式来控制 。
3.添加新的成员 派生类新成员的加入是继承与派生机
制的核心,是保证派生类在功能上有所发展的关键。
本章的内容基本上是按照派生的这三个步骤组织的。第
一步实际在声明派生类之后自动完成了,程序员无法干
预,我们也不再做深入讨论。第二个步骤中我们着重学
习不同继承方式下的基类成员的访问控制问题。在第三
步中,重点放在了构造函数和析构函数上,其他一般成
员的添加方法和规则与我们新声明一个类时完全相同。
第9章 继承与派生类
9.1 继承的基本概念 9.2 访问控制 9.3 派生类的构造和析构函数 9.4 派生类成员的标识与访问 9.5 赋值兼容规则 9.6
1
教学目的
1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解公有继承下基类成员对派生类成员和派生类
对象的可见性,能正确地访问继承层次中的各种类 成员; 3.理解保护成员在继承中的作用,能够在适当的时 候选择使用保护成员以便派生类成员可以访问基类 的部分非公开的成员; 4. 理解虚函数在类的继承层次中的作用,虚函数的 引入对程序运行时的影响,能够对使用虚函数的简 单程序写出程序结果
10
在派生类的声明中,除了要指定基类外, 还需要指定继承方式。继承方式规定了如 何访问从基类继承的成员。在派生类的声 明中,每一个“继承方式”只限定紧随其 后的基类。继承方式关键字为public, protected和private,分别表示公有继承、 保护继承和私有继承。如果不显式地给出 继承方式关键字,系统的默认值就认为是 私有继承(private)。类的继承方式指定了派 生类成员以及类外对象对于从基类继承来 的成员的访问权限,这将在下一节详细介 绍。
《继承和派生》课件
时提供默认值。
派生类的析构函数
派生类析构函数在销毁派生类对象时 自动调用,用于释放派生类所占用的 资源。
派生类析构函数可以包含代码,用于 清理派生类所占用的资源。
派生类析构函数可以访问基类的析构 函数,通过使用`this`关键字调用基类 析构函数。
派生类析构函数可以重载基类析构函 数,以便在销毁派生类对象时执行特 定的操作。
基类析构函数的调用
在派生类的析构函数中,可以通过使用`this`关键字调 用基类的析构函数,以确保基类资源得到正确释放。
输标02入题
如果在派生类的析构函数中没有显式调用基类的析构 函数,则编译器会自动调用基类的默认析构函数。
01
03
在某些情况下,可能需要显式调用基类的析构函数, 以确保资源得到正确释放。例如,当基类包含动态分
02 继承的方式
公有继承
总结词
公有继承是指子类可以访问父类的公有成员。
详细描述
在公有继承中,子类可以访问父类的公有成员(即不加任 何修饰符的成员),这些成员在子类中保持公有属性。子 类可以继承和使用父类的公有成员,包括函数、变量、常 量等。
总结词
公有继承是实现代码复用的一种方式。
详细描述
通过公有继承,子类可以继承父类的公有成员,从而避免 重复编写相同的代码。这有助于提高代码的复用性和维护 性。
注意事项
虚函数和纯虚函数的使用 应合理规划,避免过度使 用导致程序复杂度和维护 成本增加。
继承和派生的效率问题
继承
通过共享已存在的代码, 减少代码冗余。但也可能 导致内存浪费和性能下降 。
派生
通过扩展已有类,增加新 功能或修改已有功能。但 也可能导致内存消耗增加 和性能下降。
注意事项
派生类的析构函数
派生类析构函数在销毁派生类对象时 自动调用,用于释放派生类所占用的 资源。
派生类析构函数可以包含代码,用于 清理派生类所占用的资源。
派生类析构函数可以访问基类的析构 函数,通过使用`this`关键字调用基类 析构函数。
派生类析构函数可以重载基类析构函 数,以便在销毁派生类对象时执行特 定的操作。
基类析构函数的调用
在派生类的析构函数中,可以通过使用`this`关键字调 用基类的析构函数,以确保基类资源得到正确释放。
输标02入题
如果在派生类的析构函数中没有显式调用基类的析构 函数,则编译器会自动调用基类的默认析构函数。
01
03
在某些情况下,可能需要显式调用基类的析构函数, 以确保资源得到正确释放。例如,当基类包含动态分
02 继承的方式
公有继承
总结词
公有继承是指子类可以访问父类的公有成员。
详细描述
在公有继承中,子类可以访问父类的公有成员(即不加任 何修饰符的成员),这些成员在子类中保持公有属性。子 类可以继承和使用父类的公有成员,包括函数、变量、常 量等。
总结词
公有继承是实现代码复用的一种方式。
详细描述
通过公有继承,子类可以继承父类的公有成员,从而避免 重复编写相同的代码。这有助于提高代码的复用性和维护 性。
注意事项
虚函数和纯虚函数的使用 应合理规划,避免过度使 用导致程序复杂度和维护 成本增加。
继承和派生的效率问题
继承
通过共享已存在的代码, 减少代码冗余。但也可能 导致内存浪费和性能下降 。
派生
通过扩展已有类,增加新 功能或修改已有功能。但 也可能导致内存消耗增加 和性能下降。
注意事项
C类的继承和派生ppt课件
this->x=x;this->y=y; } void Point::Show() {
cout<<"("<<x<<","<<y<<")"<<en dl; }
-
//Circle.h文件 #ifndef CIRCLE_H #define CIRCLE_H #include <iostream> #include "Point.h" using namespace std; class Circle:public Point { protected:
name=nam; sex=s; } ~Student( ){ } protected: int num; string name; char sex ; };
-
class Student1: public Student { public:
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)
using namespace
std;
{ protected:
class Base
int j;
{ protected:
int i; public:
void F()
public: void Fun() { i=20; }
};
{
void main()
} };
{ Drived d;
}
-
4.5 派生类的构造函数和析构函数
如程序PointRect1所示:
-
4.4继承方式
cout<<"("<<x<<","<<y<<")"<<en dl; }
-
//Circle.h文件 #ifndef CIRCLE_H #define CIRCLE_H #include <iostream> #include "Point.h" using namespace std; class Circle:public Point { protected:
name=nam; sex=s; } ~Student( ){ } protected: int num; string name; char sex ; };
-
class Student1: public Student { public:
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)
using namespace
std;
{ protected:
class Base
int j;
{ protected:
int i; public:
void F()
public: void Fun() { i=20; }
};
{
void main()
} };
{ Drived d;
}
-
4.5 派生类的构造函数和析构函数
如程序PointRect1所示:
-
4.4继承方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-
4.1.2 派生类和基类的关系
描述各级学生的类的继承关系如下图:
基类与派生类的关系: 派生类是基类的具体化,基类则是派生类的抽象 一个派生类的对象也是一个基类的对象。应该具有基类
的一切属性和方法。 派生类除了具有基类的一切属性和方法外,还可以有自
己所特有的属性和方法。 -
4.1.3 单继承与多继承
void SetPoint(int x,int y) {
this->x=x; this->y=y; }
void MovePoint(int dx,int dy)
{ x+=dx; y+=dy;
}
void ShowPoint() {
cout<<'('<<x<<','<<y<<')'; } };
-
//Rectangle.h #include <iostream> #include "Point.h" using namespace std; class Rectangle:public Point { private:
如程序PointRect1所示:
-
4.4继承方式
派生类的继承方式有三种:public,private,protected。 不同的继承方式决定了基类成员在派生类中的访问属性。
继承方式 基类中的访问属性 派生类中的访问属性
public
publicpublicprotecedprotected
private
-
4.3 派生类的构成
派生类中的成员包括从基类继承过来的成员和自己增加 的成员两大部分。在基类中包括数据成员和成员函数(或称数据 与方法)两部分,派生类分为两大部分: 一部分是从基类继承来 的成员,另一部分是在声明派生类时增加的部分。每一部分均 分别包括数据成员和成员函数。
数据成员 成员函数
基类(Point)
第四章继承和派生
-
4.1继承和派生的概念
面向对象程序设计有4个主要特点: 抽象、封装、继承和 多态性。在本章中主要介绍有关继承的知识,在下一章中 将介绍多态性。
C++语言提供了类的继承机制,解决了软件重用问题。
4.1.1 继承与派生的概念
一个类中包含了若干数据成员和成员函数。在不同的类 中,数据成员和成员函数是不相同的。但有时两个类的内 容基本相同或有一部分相同。
不可访问
public
private
private
protected private
private 不可访问
public
protected
protected
protected
protected
private
不可访问
-
4.4.1类的保护成员
前面介绍过类的成员(数据成员和成员函数)的访问属性有 私有的(private)的和公有的(public的)。另外还提到类的访问 属性也可以有保护的(protected的)。
int width; int height; public: int GetWidth() {
return width; } int GetHight() {
return height; }
void SetRect(int x,int y,int w,int h) { SetPoint(x,y); width=w; height=h; } void ShowRect() { cout<<"左上角坐标
-
类的继承:一个新类从已存在的类那里获得该类已有的 特性叫作类的继承。已存在的类叫作父类,也叫作基类。 产生的新类叫作子类或派生类。
类的派生:从一个已有的类那里产生一个新类的过程叫 类的派生。已存在的类叫作父类,也叫作基类。产生的新
类叫作派生类或子类。
类的继承和派生是同一概念,前者是从子类的角度来说, 后者是从父类的角度来说的。我们通常说子类继承了父类。 父类派生了子类。
为:"; ShowPoint(); cout<<endl; cout<<"宽为:
"<<width<<endl; cout<<"长为:
"<<height<<endl; }
};
-
//main.cpp #include "Rectangle.h" void main() {
Rectangle r; r.SetRect(0,0,10,20); r.ShowRect(); r.MovePoint(10,10); r.ShowRect(); }
int x; int y; GetX(); GetY(); SetPoint(); MovePoint(); ShowPoint();
继承
新 增
-
派生类(Rectangle)
int x; int y; GetX(); GetY(); SetPoint(); MovePoint(); ShowPoint(); int width; int height;
类中的protected成员与private成员一样,只能在本类 的成员函数中访问,不能在类外通过对象来访问。 但通过上面的表中可以看出当类派生时,基类的private成员 在派生类中是不可访问的。而基类的protected成员在派生 类中随继承方式的不同而不同。
单继承:一个派生类只从一个基类继承。
多重继承:一个派生类从两个或多个基类继承。
-
4.2 派生类的声明方式
声明派生类的一般形式为 class 派生类名: [继承方式] 基类名 {
派生类新增加的成员 }; 继承方式包括: public(公有的),private(私有的)和 protected(受保护的),此项是可选的,如果不写此项,则默 认为private(私有的)。 如下程序演示了类Rectangle(四边形)由类Point继承而来。
GetWidth(); GetHeight();
SetRect(); ShowRect();
如果在派生类中定义了和基类中同名函数(函数参数个数 和类型可以相同也可以不相同),则派生类中的函数会隐藏基 类的同名函数。在派生类中不能直接访问基类中的同名函数。 (注意与重载的区别。在同一个类中的同名不同参函数为重载 函数)
-
//Point.h #include <iostream> #include <cmath> using namespace std; class Point { private:
int x,y; public:
int GetX() {
return x; } int GetY() {
return y; }
4.1.2 派生类和基类的关系
描述各级学生的类的继承关系如下图:
基类与派生类的关系: 派生类是基类的具体化,基类则是派生类的抽象 一个派生类的对象也是一个基类的对象。应该具有基类
的一切属性和方法。 派生类除了具有基类的一切属性和方法外,还可以有自
己所特有的属性和方法。 -
4.1.3 单继承与多继承
void SetPoint(int x,int y) {
this->x=x; this->y=y; }
void MovePoint(int dx,int dy)
{ x+=dx; y+=dy;
}
void ShowPoint() {
cout<<'('<<x<<','<<y<<')'; } };
-
//Rectangle.h #include <iostream> #include "Point.h" using namespace std; class Rectangle:public Point { private:
如程序PointRect1所示:
-
4.4继承方式
派生类的继承方式有三种:public,private,protected。 不同的继承方式决定了基类成员在派生类中的访问属性。
继承方式 基类中的访问属性 派生类中的访问属性
public
publicpublicprotecedprotected
private
-
4.3 派生类的构成
派生类中的成员包括从基类继承过来的成员和自己增加 的成员两大部分。在基类中包括数据成员和成员函数(或称数据 与方法)两部分,派生类分为两大部分: 一部分是从基类继承来 的成员,另一部分是在声明派生类时增加的部分。每一部分均 分别包括数据成员和成员函数。
数据成员 成员函数
基类(Point)
第四章继承和派生
-
4.1继承和派生的概念
面向对象程序设计有4个主要特点: 抽象、封装、继承和 多态性。在本章中主要介绍有关继承的知识,在下一章中 将介绍多态性。
C++语言提供了类的继承机制,解决了软件重用问题。
4.1.1 继承与派生的概念
一个类中包含了若干数据成员和成员函数。在不同的类 中,数据成员和成员函数是不相同的。但有时两个类的内 容基本相同或有一部分相同。
不可访问
public
private
private
protected private
private 不可访问
public
protected
protected
protected
protected
private
不可访问
-
4.4.1类的保护成员
前面介绍过类的成员(数据成员和成员函数)的访问属性有 私有的(private)的和公有的(public的)。另外还提到类的访问 属性也可以有保护的(protected的)。
int width; int height; public: int GetWidth() {
return width; } int GetHight() {
return height; }
void SetRect(int x,int y,int w,int h) { SetPoint(x,y); width=w; height=h; } void ShowRect() { cout<<"左上角坐标
-
类的继承:一个新类从已存在的类那里获得该类已有的 特性叫作类的继承。已存在的类叫作父类,也叫作基类。 产生的新类叫作子类或派生类。
类的派生:从一个已有的类那里产生一个新类的过程叫 类的派生。已存在的类叫作父类,也叫作基类。产生的新
类叫作派生类或子类。
类的继承和派生是同一概念,前者是从子类的角度来说, 后者是从父类的角度来说的。我们通常说子类继承了父类。 父类派生了子类。
为:"; ShowPoint(); cout<<endl; cout<<"宽为:
"<<width<<endl; cout<<"长为:
"<<height<<endl; }
};
-
//main.cpp #include "Rectangle.h" void main() {
Rectangle r; r.SetRect(0,0,10,20); r.ShowRect(); r.MovePoint(10,10); r.ShowRect(); }
int x; int y; GetX(); GetY(); SetPoint(); MovePoint(); ShowPoint();
继承
新 增
-
派生类(Rectangle)
int x; int y; GetX(); GetY(); SetPoint(); MovePoint(); ShowPoint(); int width; int height;
类中的protected成员与private成员一样,只能在本类 的成员函数中访问,不能在类外通过对象来访问。 但通过上面的表中可以看出当类派生时,基类的private成员 在派生类中是不可访问的。而基类的protected成员在派生 类中随继承方式的不同而不同。
单继承:一个派生类只从一个基类继承。
多重继承:一个派生类从两个或多个基类继承。
-
4.2 派生类的声明方式
声明派生类的一般形式为 class 派生类名: [继承方式] 基类名 {
派生类新增加的成员 }; 继承方式包括: public(公有的),private(私有的)和 protected(受保护的),此项是可选的,如果不写此项,则默 认为private(私有的)。 如下程序演示了类Rectangle(四边形)由类Point继承而来。
GetWidth(); GetHeight();
SetRect(); ShowRect();
如果在派生类中定义了和基类中同名函数(函数参数个数 和类型可以相同也可以不相同),则派生类中的函数会隐藏基 类的同名函数。在派生类中不能直接访问基类中的同名函数。 (注意与重载的区别。在同一个类中的同名不同参函数为重载 函数)
-
//Point.h #include <iostream> #include <cmath> using namespace std; class Point { private:
int x,y; public:
int GetX() {
return x; } int GetY() {
return y; }