教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

C++ Course Material3

来源:网络收集 时间:2026-08-02
导读: C++面向对象程序设计第4章 第4章 派生类与继承 类的封装性类A 私有成员 一般为: 数据成员 对象1 外部函数 void main() { 类A 对象1; a=10 对象1.a X 错!不能访问私有成员 对象1.g(5)√ g(int n) { …… } } 外部函数 int f(类A 对象2) { ……(同样) a公有成

C++面向对象程序设计第4章

第4章 派生类与继承

类的封装性类A 私有成员 一般为: 数据成员

对象1

外部函数

void main() { 类A 对象1; a=10 对象1.a X 错!不能访问私有成员 对象1.g(5)√ g(int n) { …… } } 外部函数 int f(类A 对象2) { ……(同样)

a公有成员 一般为: 成员函数 g(int n)

对象2

}

4.1 派生类的概念4.1.1 为什么要使用继承 从现有类出发建立新的类,使新类继承老类的特点和功能,并 且又加上自己的特点和功能的程序设计方法,是面向对象程序设计 一个重要的技术。 老的类叫基类,新的类叫派生类。 继 汽 车 派 对派生类可做如下几种变化: 承 生 (1) 可以增加新的成员数据。 (2) 可以增加新的成员函数。 运输汽车 专用汽车 (3) 可以重新定义己有的成员函数。 消防车 洒水车 (4) 可以改变现有成员的属性。 客车 货车 C++中有两种继承: 单继承 单继承和多重继承。 窗 口 滚 动 条 对于单继承(单基派生) 派生类只能有一个基类; 对于多重继承(多基派生) 可滚动的窗口 派生类可以有多个基类。 多重继承

class person{ public: : void print() { cout<<”姓名:”<<name<<endl; cout<<”年龄:”<<age<<endl; cout<<”性别:”<<sex<<endl; } class Employee{ protected: public: string name; : int age; void print1() char sex; { cout<<”姓名:”<<name<<endl; }; cout<<”年龄:”<<age<<endl;

};

cout<<”性别:”<<sex<<endl; cout<<”部门:”<<department<<endl; cout<<”薪金:”<<salary<<endl; } protected: string name; int age; char sex; string department; float salary;

4.1.2 派生类的声明class person{ public: void print() { cout<<”姓名:”<<name<<endl; cout<<”年龄:”<<age<<endl; cout<<”性别:”<<sex<<endl; } protected: string name; int age; char sex; }; class Employee:public person{//声明派生类Employee公有继承了基类person public: void print1() //新增加的成员函数 { print(); cout<<”部门:”<<department<<endl; cout<<”薪金:”<<salary<<endl; } private: string department; //新增加的数据成员 float salary; //新增加的数据成员 };

声明派生类格式: class 派生类名 : [继承方式] 基类名 { //派生类新增的数据成员和成员函数 }; 继承方式: 公有继承(用public) 私有继承(用private或缺省) 保护继承(用protected)

4.1.3 派生类的构成 派生类除了可以从基类继承成员外,还可以增加自己的数据成 员和成员函数,是派生类对基类的发展。 person 类 string name; int age; char sex void print() Employee 类 string name; int age; char sex; void print() string department; float salary; void print1();

继承

新增

1) 派生类从基类接收成员 2) 调整从基类接收来的成员 3) 在派生类中增加新的成员

4.1.4 基类成员在派生类中的访问属性 由前面第3章已知: 单独一个基类,

其成员有public(公有)、 protected(保护)和 private(私有)三种被访问的属性,在基类内的自身成员可以对基 类中任何一个其他成员进行访问。但是若基类定义了对象后,通过 对象就只能访问该类的公有成员。 当定义了派生类以后,派生类继承了基类除构造函数和析构函 数以外的所有成员,但这些继承下来的成员在派生类中的被访问属 性就发生了变化,是在派生过程中由继承方式引起的。(调整了!) 由于继承方式有public(公有继承)、 protected(保护继承)和 private(私有继承)三种,不同的继承方式导致原来具有不同被访 问的属性的继承下来的成员在派生类中的被访问属性也就不同。 我们可对派生类中从基类继承下来的成员,划分成四种被访属 性: 不可直接访问的、公有(public)、保护(protected)和私有 (private)

表4.1基类成员在派生类中的访问属性基类中的成员 在公有派生类 在私有派生类 在保护派生类 中的访问属性 中的访问属性 中的访问属性 私有成员 不可直接访问 不可直接访问 不可直接访问 公有成员 公有 私有 保护

保护成员

保护

私有

保护

(1) 基类中的私有成员 无轮哪中派生方式,基类中的私有成员不允许派生类 继承,即派生类中是不可直接访问的。 (2) 基类中的公有成员 当继承方式为公有时,在派生类中仍以公有成员。 当继承方式为私有时,在派生类中都以私有成员。 当继承方式为保护时,在派生类中都以保护成员。(3) 基类中的保护成员 当继承方式为公有时,在派生类中仍以保护成员。 当继承方式为私有时,在派生类中都以私有成员。 当继承方式为保护时,在派生类中都以保护成员。

class base private:

protected:public: 私有继承 保护继承 公有继承

class derive1 新private:新protected: 新public:

class derive1 新private: 新protected: 新public:

class derive1 新private: 新protected: 新public:

4.1.5 派生类对基类成员的访问规则 派生类对基类成员的访问形式 (1) 内部访问。即由派生类中新增成员对基类继承来的成员访问。 (2) 对象访问。即在外部,用派生类的对象对从基类继承来的成员 访问。 1.私有继承的访问规则: 当类的继承方式为私有继承时,基类的public成员和protected成 员被继承后作为派生类的private成员,派生类的其他成员可以直接 访问它们,但是在类外部通过派生类的对象无法访问。 基类的private成员不允许派生类继承,因此在私有派生类中是 不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都 无法直接访问从基类继承来的private成员,但是可以通过基类提供 的public成员函数间接访问。 表4.2 私有继承的访问规则基类中的成员 访问方式 内部

访问 对象访问 私有成员 不可访问 不可访问 公有成员 可访问 不可访问 保护成员 可访问 不可访问

例4.1 私有继承的访问规则举例1#include <iostream.h> class Base{ //定义基类 public: void setx(int n) { x=n; } void showx() { cout<<x<<endl; } private: int x; }; class Derived : private Base { //定义私有派生类 public: void setxy(int n, int m) { setx(n); y=m; } //可以用setx,它已成为该类的private void showxy() { cout <<x<<y<<endl; } // 非法不能访问 x ,改为 showx( );cout<<y<<endl; private: int y; }; void main() { Derived obj; obj.setx(10); //非法 obj.showx(); //非法 obj.setxy(20,30); //正确 obj.showxy(); //正确

上面是公有成员变成私有,下面是保护成员变成私有: 例4.2 私有继承的访问规则举例2#include <iostream.h> class Base{ //定义基类 public: void seta(int sa) { a=sa; } void showa() { cout<<"a="<<a<<endl; } protected: int a; }; class Derive1: private Base { //定义私有派生类 public: void setab(int sa, int sb) { a=sa; b=sb; } //可以用sa,它已成为该类的private void sho …… 此处隐藏:2670字,全部文档内容请下载后查看。喜欢就下载吧 ……

C++ Course Material3.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1695025.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)