南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 5-继承多态和虚函数

第5章继承、多态和虚函数陈哲教授南京航空航天大学计算机科学与技术学院
1 第 5 章 继承、多态和虚函数 陈哲 教授 南京航空航天大学 计算机科学与技术学院

继承5.1继承是OOP程序设计中很重要的一个特性。继承可以扩充现有类以满足新的应用。将已有的类称之为父类,也称基类,将新产生的类称为子类,也称为派生类派生类不做任何改变地继承了基类中的所有变量和函数(构造函数和析构函数除外),并且还可以增加新的数据成员和函数,从而使派生类比基类更为特殊化例5-1:Test类继承Grade类
2 5.1 继承 • 继承是OOP程序设计中很重要的一个特性。继承 可以扩充现有类以满足新的应用。 • 将已有的类称之为父类,也称基类,将新产生的 类称为子类,也称为派生类。 • 派生类不做任何改变地继承了基类中的所有变量 和函数(构造函数和析构函数除外),并且还可 以增加新的数据成员和函数,从而使派生类比基 类更为特殊化。 • 例5-1: Test类继承Grade类

回顾类定义classGrade的基本结构floatscore;charletter;voidcalcGrade();public:void setScore(float s)score=s;calcGradeO;)float getScoreO return score;char getLetterOreturn letter;8
class Grade { float score; char letter; void calcGrade( ); public: void setScore(float s) { score = s; calcGrade( ); } float getScore( ) { return score; } char getLetter( ) { return letter; } }; 回顾类定义 的基本结构

// Definition of member function Grade::calcGradevoidGrade::calcGrade()if (score>89)letter='A';)letter=B';elseif(score>79))letter='C'else if (score > 69)elseif(score>59)letter='D';else letter ='F';
// Definition of member function Grade::calcGrade void Grade::calcGrade( ) { if (score > 89) letter = 'A'; else if (score > 79) letter = 'B'; else if (score > 69) letter = 'C'; else if (score > 59) letter = 'D'; else letter = 'F'; }

Gradeclass Test : publicintnumQuestions;intnumMissed;floatpointsEach;public:Test( int, int);7
class Test : public Grade { int numQuestions; int numMissed; float pointsEach; public: Test( int, int ); };

/参数q代表问题的个数,m代表答错的题数Test::Test(int q, int m)floatnumericGrade;numQuestions =q;numMissed = m;pointsEach = 100.0f / numQuestions;numericGrade=100.0f- numMissed *pointsEachsetScore(numericGrade);
6 //参数q 代表问题的个数,m代表答错的题数 . Test::Test(int q, int m) { float numericGrade; numQuestions = q; numMissed = m; pointsEach = 100.0f / numQuestions; numericGrade = 100.0f - numMissed * pointsEach ; setScore(numericGrade); }

void main()int questions, missed;cout> questions;cout> missed;Testexam(questions, missed);cout.precision(2);cout<<"InThe scoreis"<<exam.getScoreOcout<<"In The grade is " << examgetLetterO;5-1.cpp
void main( ) { int questions, missed; cout > questions; cout > missed; Test exam(questions, missed); cout.precision(2); cout << "\n The score is " << exam.getScore( ); cout << "\n The grade is " << exam.getLetter( ); } 5-1.cpp

上例中,父类中的公有成员在子类中仍是公有的,它们可以和子类中的公有成员一样被访问。但反过来是错误的父类对象或父类中的某个函数不能调用子类中的函数classBadBaseint x;public:BadBaseO x =getVal(O;} // Errorclass Derived :public BadBaseint y;public:Derived(int z)(y=z;)intgetVal()(returny;)
上例中,父类中的公有成员在子类中仍是公有的,它们可 以和子类中的公有成员一样被访问。但反过来是错误的, 父类对象或父类中的某个函数不能调用子类中的函数。 class BadBase { int x; public: BadBase( ) { x = getVal( ); } // Error }; class Derived : public BadBase { int y; public: Derived( int z ) { y = z; } int getVal( ) { return y; } };

5.2保护成员和类的访问·基类中的保护成员和私有成员比较类似,唯一的区别是:子类不可访问基类中的私有成员,但可访问基类中的保护成员。·在公有继承或保护继承的情况下,子类能访问基类的protected成员。回顾类定义中privateExample:例5-2和public的作用
9 5.2 保护成员和类的访问 • 基类中的保护成员和私有成员比较类似,唯一的区 别是:子类不可访问基类中的私有成员,但可访问 基类中的保护成员。 • 在公有继承或保护继承的情况下,子类能访问基类 的protected成员。 • Example: 例 5-2 回顾类定义中private 和public的作用

classGradeprotected:floatscore;charletter;voidcalcGrade();public:void setScore(float s)score=s;calcGrade;float getScore() return score;chargetLetter()return letter;
class Grade { protected: float score; char letter; void calcGrade( ); public: void setScore(float s) { score = s; calcGrade( ); } float getScore( ) { return score; } char getLetter( ) { return letter; } };
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 4-类的高级部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 3-类的基础部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 2-文件操作.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 1-C++程序设计基础.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)09 编译预处理和多文件项目.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)08 文件.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)07 记录类型.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)06 数组.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)05 函数.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)04 控制流.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)03 运算符和表达式.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)02 常量和变量.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)01 计算机和程序.pptx
- 《程序设计》课程教学资源(实验指导)C++语言习题集(南京航空航天大学:陈哲).pdf
- 《程序设计》课程教学资源(书籍文献)Google开源项目风格指南(中文版).pdf
- 长春大学:旅游学院:《Visual FoxPro程序设计》课程教学资源(授课教案,共七章).pdf
- 《计算机导论》课程教学资源(授课教案,教材讲义,共六章).pdf
- 江苏大学:RISC-V CPU设计实验(讲义).pdf
- 黄河水利职业技术大学:《电商网站建设与优化》课程思政教案(教学设计)PHP动态网站开发.pdf
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第09章 SPI与I2C串行总线.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 6-异常处理.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 7-模板.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 8-标准模板库STL.ppt
- 揭阳职业技术学院:《Linux操作系统》课程教学资源(实验教案,共十八个).pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《物联网》课程授课教案.pdf
- 揭阳职业技术学院:《程序设计基础》课程授课教案.pdf
- 揭阳职业技术学院:《办公自动化》课程授课教案.pdf
- 揭阳职业技术学院:《图像处理》课程授课教案.pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《Photoshop制图》课程授课教案.pdf
- 清华大学:《计算机图形学基础》课程教学大纲 Fundamental of Computer graphics(负责人:胡事民).pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)图形学简介.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)视图模型变换.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)双向反射分布函数.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)光线跟踪,递归算法,光线求交.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)参数曲线曲面、Bezier曲线、Bezier曲面.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格模型、网格细分和简化.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格参数化模型切割的骨架算法.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)B样条曲线曲面.pdf
